Вы можете сделать это следующим образом: создать набор записей ADODB и заполнить его данными из набора записей вашей формы.
Это образец из моей базы данных:
Private Sub Form_Open(Cancel As Integer)
Dim RS As New adodb.Recordset, RST As DAO.Recordset, InvTotal As Currency
Set RS = New adodb.Recordset
With RS
' It's a free field that doesn't belong to form query:
.Fields.Append "InvCounter", adInteger
.Fields.Append "InvProduct", adVarChar, 255
.Fields.Append "InvUnit", adVarChar, 3
.Fields.Append "InvQuantity", adInteger
.Fields.Append "InvPrice", adCurrency
.Fields.Append "InvValue", adCurrency
.CursorType = adOpenKeyset
.CursorLocation = adUseClient
.LockType = adLockPessimistic
.Open
End With
Set RST = CurrentDb.OpenRecordset("SELECT * FROM tblWarehouse WHERE wOrder = " & idf, dbOpenSnapshot)
InvTotal = 0
If RST.RecordCount Then
Do Until RST.EOF
RS.AddNew
' I fill my free field with row number but i can edit it
' manually in form:
RS.Fields("InvCounter") = RST.AbsolutePosition + 1
RS.Fields("InvProduct") = RST("wProduct")
RS.Fields("InvUnit") = "p"
RS.Fields("InvQuantity") = RST("wQuantity")
RS.Fields("InvPrice") = RST("wPrice")
RS.Fields("InvValue") = RS.Fields("InvPrice") * RST("wQuantity")
InvTotal = InvTotal + RS.Fields("InvValue")
RS.Update
RST.MoveNext
Loop
Set Me.Recordset = RS
Me.InvTotal = InvTotal
RST.Close
Set RST = Nothing
RS.Close
Set RS = Nothing
End If
End Sub
Если вы хотите сохранить свои изменения в этом поле, вы должны сделать это и через VBA.