Dav*_*ton 14
在答案中没有人真正给你任何代码示例,或者甚至引用了一个例子(但是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
Run Code Online (Sandbox Code Playgroud)
(在Access中测试和工作的代码)
Dan*_*llo 11
它看起来像我们这样做:MSDN - TRANSACTION语句(Microsoft Access SQL)
交易不会自动启动.要启动事务,您必须明确使用:
BEGIN TRANSACTION
Run Code Online (Sandbox Code Playgroud)
通过提交事务期间执行的所有工作来结束事务:
COMMIT [TRANSACTION | WORK]
Run Code Online (Sandbox Code Playgroud)
通过回滚事务期间执行的所有工作来结束事务:
ROLLBACK [TRANSACTION | WORK]
Run Code Online (Sandbox Code Playgroud)