Никто на самом деле не дал вам никаких примеров кода здесь в ответе и даже не привел пример (хотя файлы справки Access содержат примеры). Ключевой вопрос, который нужно иметь в виду, заключается в том, что в Jet / ACE (Access не поддерживает транзакции сам по себе - это зависит от того, какой механизм базы данных вы используете для этого), что транзакция контролируется на уровне рабочей области. Вы можете создать новое рабочее пространство для вашей транзакции или создать новое. Вот пример кода:
On Error GoTo errHandler
Dim wrk As DAO.Workspace
Dim db As DAO.Database
Dim lngInvoiceID As Long
Set wrk = DBEngine.Workspaces(0)
Set db = wrk.OpenDatabase(CurrentDb.Name)
With wrk
.BeginTrans
db.Execute "INSERT INTO tblInvoice (CustomerID) VALUES (123);", dbFailOnError
lngInvoiceID = db.OpenRecordset("SELECT @@IDENTITY")(0)
db.Execute "INSERT INTO tblInvoiceDetail (InvoiceID) VALUES (" & lngInvoiceID & ")", dbFailOnError
.CommitTrans
Debug.Print "Inserted Invoice header and detail for Invoice " & lngInvoiceID
End With
exitRoutine:
If Not (db Is Nothing) Then
db.Close
Set db = Nothing
End If
Set wrk = Nothing
Exit Sub
errHandler:
MsgBox Err.Number & ": " & Err.Description, vbExclamation, "Error in transaction"
wrk.Rollback
Resume exitRoutine
(код проверен и работает в Access)