在 MS Access 中回滚多个 SQL 更新查询

Posted

技术标签:

【中文标题】在 MS Access 中回滚多个 SQL 更新查询【英文标题】:Rollback Multiple SQL update queries in MS Access 【发布时间】:2010-01-01 01:52:41 【问题描述】:

我在 MS Access 的 VBA 中执行了多个 SQL 存储过程(例如 UPDATE、SELECT INTO 语句):

CurrentDb.Execute "qry1" CurrentDb.Execute "qry2"

我想要这样: * 如果 qry2 失败,它将撤消 qry1。 * qry1 和 qry2 是同时执行的,(因为我有很多这样的存储过程在一个链中执行),所以过程运行得更快。

如何做到这一点?

【问题讨论】:

【参考方案1】:

事务可能适合,它们允许回滚:http://msdn.microsoft.com/en-us/library/bb243155.aspx

编辑

这是 DAO 中的一个粗略示例:

Dim strSQL As String
Dim db As DAO.Database
Dim wrk As Workspace

On Error GoTo TrapError

    Set db = CurrentDb
    Set wrk = DBEngine.Workspaces(0)

    wrk.BeginTrans
        strSQL = "Update sysInfo Set InvoiceOR=False"
        db.Execute strSQL, dbFailOnError
    wrk.CommitTrans

Exit_Sub:
    Set db = Nothing
    Set wrk = Nothing
    Exit Sub

TrapError:

    MsgBox "Failed: " & Err.Description
    wrk.Rollback
    Err.Clear
    Resume Exit_Sub

以下是 ADO 的一些粗略说明:

Dim cmd As ADODB.Command
Dim cn As ADODB.Connection

Set cmd = CreateObject("ADODB.Command")
Set cn = CurrentProject.Connection

cmd.CommandText = "Update sysInfo Set InvoiceOR=False"
cmd.ActiveConnection = cn
cmd.ActiveConnection.BeginTrans
cmd.Execute , , adExecuteNoRecords

If Err <> 0 Then
    cmd.ActiveConnection.RollbackTrans
Else
    cmd.ActiveConnection.CommitTrans
End If

【讨论】:

我知道用于记录集的事务。但是它们可以用于 SQL 语句吗?

以上是关于在 MS Access 中回滚多个 SQL 更新查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PostgreSQL 中回滚更新

在 PyMySQL 中回滚多个查询

如何在SQL Server 2005中回滚UPDATE查询?

如何在 SQL Server 中回滚或提交事务

在 Mercurial 中回滚多个提交(在推送到公共之前)

如何从 SQL Server 读取 MS Access 数据库以更新一个或多个表列中的数据?