title: Subform blocking Recordset.AddNew (Error 3027)
body: <p>Having a subform displaying the same table used in recordset makes the table read only (error 3027). Getting rid of the subform fixes the problem. Similar setup works in my other form interface.</p>
  
  <p>I tried to delete the subform, which fix the accessibility problem. But that would defeat the original UX purpose.</p>
  
  <pre><code>Option Explicit
  Public UnitRS As DAO.Recordset
  Public ModelRS As DAO.Recordset
  Public NameUnitRecords As String
  Public NameModelRecords As String
  
  Public Sub Form_Load()
      'Initialization
      NameUnitRecords = "tblBatteriesMainRecordsUnits"
      NameModelRecords = "tblBatteriesRecordsModels"
  End Sub
  
  Private Sub SetUnitRecordsets()
      'Set the path to the Battery Records table
      Set UnitRS = CurrentDb.OpenRecordset(NameUnitRecords, dbOpenDynaset)
  End Sub
  
  Private Sub txtBatteryID_AfterUpdate()
      'Set the recordset path for unit records
      Call SetUnitRecordsets
  
      'do a findfirst search for the Battery ID, using value from textbox txtBatteryID
      UnitRS.FindFirst "[Battery ID]=" &amp; txtBatteryID
  
      'If no matching record, leave the other fields empty
      If UnitRS.NoMatch Then
      'If there is a matching record, then, grab the model number
      Else
          'as there is an existing record with model number, run a search on the model number and grab the model info
      End If
      'close recordset
      UnitRS.Close
      'check if the button can be enabled
  End Sub
  
  Private Sub cmbModelNumber_AfterUpdate()
      'Set the recordset path for model records    
      'do a findfirst search for the Model Number, using value from combobox cmbModelNumber
      'If no matching record, leave the other fields empty
      If ModelRS.NoMatch Then
       'If there is a matching record, then, grab the Model Info
      Else
      End If
      'close recordset 
      'check if the button can be enabled
  End Sub
  
  Private Sub btnSaveAndCLear_Click()
      Dim Response, strOldModelNumber
  
      'Set the recordset path for unit records
      Call SetUnitRecordsets
      'Set the recordset path for model records
      'close all related tables, queries and forms
      DoCmd.Close acTable, NameUnitRecords, acSaveYes
      DoCmd.Close acForm, "frmSubBatteriesMainRecordsUnits", acSaveYes
  
      'If a new model record is required
      ModelRS.FindFirst "[Model Number]='" &amp; cmbModelNumber &amp; "'"
      If ModelRS.NoMatch Then
          'msg box confirm model information
          'If user chooses yes
          If Response = vbYes Then
              'create new model record
              'this block could be done with "With...End" format for less error vulerability?
              'nah, unless it is repetitively called, it's too much work to inplement just the .addnew part
              'requery the two combobox to reflect newest changes
          'User chooses no
          Else
              'popup a message telling the user the battery and model record is not logged, but don't clear the field.
              Exit Sub
          End If
      End If
      'need to find the record first, otherwise it will edit the first one
      UnitRS.FindFirst "[Battery ID]=" &amp; txtBatteryID
      'store the old model number value
      strOldModelNumber = UnitRS("Model Number")
      'New record
      If UnitRS.NoMatch Then
          'create a new battery record
          UnitRS.AddNew
          UnitRS("Battery ID") = Me.txtBatteryID
      'If this is an edit on existing record
      Else
          'if the new value is the same as the old one
          If strOldModelNumber = cmbModelNumber Then
              'msgbox the same value, no change is done to the database
              MsgBox "the data is the same as the old record, no change is made to the record", vbInformation, "Same data"
              Exit Sub
          Else
              'msg box confirm edit
              Response = MsgBox("Please confirm edit on existing record: " &amp; Chr(13) &amp; Chr(10) &amp; "BatteryID: " &amp; txtBatteryID &amp; Chr(13) &amp; Chr(10) &amp; "Model Number: " &amp; cmbModelNumber, vbYesNo, "New Model Record Dectected")
              'If user chooses yes
              If Response = vbYes Then
                  'goto edit mode
                  UnitRS.Edit
              'if user chooses no
              Else
                  'msgbox notify the user nothing is changed in the database
                  MsgBox "Battery and Model record not logged, you may retry logging", vbInformation, "Record not logged"
                  Exit Sub
              End If
          End If
      End If
      'both changes the model number and comment field anyway
      UnitRS("Model Number") = Me.cmbModelNumber
      UnitRS("Comment") = Me.txtComment
      'commit update
      UnitRS.Update
      UnitRS.Close
  
      'clear all flieds
      'reset all locks    
      'requery the sub form to reflect the newest changes
      Me.subFrmBatteryRecords.Requery
  End Sub
  </code></pre>
  
  <p>What I would like to achieve is to have a display in the form interface to show the content of the actual record table, so that the user knows what is in the table.</p>