【问题标题】:Transaction in Access访问中的事务
【发布时间】:2011-08-22 09:51:19
【问题描述】:

例如,我需要执行几个 sql 子句、插入、更新和删除。如何使用Access中的事务将它们绑定在一起?

DAO 是首选。

喜欢:

BeginTrans
Excute SQL_1
Excute SQL_2
.....
CommitTrans

谢谢!

【问题讨论】:

    标签: ms-access vba dao


    【解决方案1】:

    这是一个更完整的骨架......

    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
    

    【讨论】:

    • +1。这实际上比 MS 在其文档中给出的示例要好得多。
    • 我会将Resume Trans_Exit 替换为' Do the rest of your error handling here,因为记录错误、显示消息、重新抛出错误或返回一些错误代码通常比“静默”回滚更合适。另外,由于 wsin_trans 只需要在 Sub 内部,我也将它们的声明放在 Sub 内部。
    • 我同意@Heinzi。至少我会添加:MsgBox Error$ 以提供一些反馈,而不是简单地回滚。
    【解决方案2】:

    如果使用DAO,可以使用全局DBEngine对象的BeginTransCommitTrans方法:

    Dim db As Database
    Set db = CurrentDb
    
    DBEngine.BeginTrans
    db.Execute SQL_1
    db.Execute SQL_2
    ...
    DBEngine.CommitTrans
    

    【讨论】:

    • 如果事务中有问题,我应该把 ROLLBACK 放在哪里?在错误处理程序中?
    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2020-02-16
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    相关资源
    最近更新 更多