Solución:
En realidad, nadie le ha dado ejemplos de código aquí en la respuesta o incluso ha citado un ejemplo (aunque los archivos de ayuda de Access incluyen ejemplos). La cuestión clave a tener en cuenta es que en Jet / ACE (Access no admite transacciones en sí, depende del motor de base de datos que esté usando para eso) que la transacción se controla en el nivel del espacio de trabajo. Puede crear un nuevo espacio de trabajo para su transacción o crear uno nuevo. Aquí hay un código de muestra:
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
(código probado y funcionando dentro de Access)
Parece que lo hacemos: MSDN – Declaración TRANSACTION (Microsoft Access SQL)
Las transacciones no se inician automáticamente. Para iniciar una transacción, debe hacerlo explícitamente utilizando:
BEGIN TRANSACTION
Concluya una transacción comprometiendo todo el trabajo realizado durante la transacción:
COMMIT [TRANSACTION | WORK]
Concluya una transacción revertiendo todo el trabajo realizado durante la transacción:
ROLLBACK [TRANSACTION | WORK]