【发布时间】:2011-08-22 09:51:19
【问题描述】:
例如,我需要执行几个 sql 子句、插入、更新和删除。如何使用Access中的事务将它们绑定在一起?
DAO 是首选。
喜欢:
BeginTrans
Excute SQL_1
Excute SQL_2
.....
CommitTrans
谢谢!
【问题讨论】:
例如,我需要执行几个 sql 子句、插入、更新和删除。如何使用Access中的事务将它们绑定在一起?
DAO 是首选。
喜欢:
BeginTrans
Excute SQL_1
Excute SQL_2
.....
CommitTrans
谢谢!
【问题讨论】:
这是一个更完整的骨架......
Dim ws As DAO.Workspace
Dim in_trans As Boolean
Sub Transaction()
On Error GoTo Trans_Error
Set ws = DBEngine.Workspaces(0)
in_trans=True
ws.BeginTrans
<do some SQL stuff; maybe use Err.Raise>
ws.CommitTrans
in_trans=False
Trans_Exit:
Set ws = Nothing
Exit Sub
Trans_Error:
If in_trans = True Then
ws.Rollback
EndIf
Resume Trans_Exit
End Sub
【讨论】:
Resume Trans_Exit 替换为' Do the rest of your error handling here,因为记录错误、显示消息、重新抛出错误或返回一些错误代码通常比“静默”回滚更合适。另外,由于 ws 和 in_trans 只需要在 Sub 内部,我也将它们的声明放在 Sub 内部。
MsgBox Error$ 以提供一些反馈,而不是简单地回滚。
如果使用DAO,可以使用全局DBEngine对象的BeginTrans和CommitTrans方法:
Dim db As Database
Set db = CurrentDb
DBEngine.BeginTrans
db.Execute SQL_1
db.Execute SQL_2
...
DBEngine.CommitTrans
【讨论】: