2010-01-01 84 views
5

我在MS Access VBA中执行多个SQL存储过程(如UPDATE,SELECT INTO语句):回滚多个SQL更新查询

CurrentDb.Execute “qry1”
CurrentDb.Execute “qry2”

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

这怎么办?

回答

7

交易可能适合,它们允许回滚: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 
+0

我知道用于记录集的事务。但是它们可以用于SQL语句吗? – 2010-01-01 03:17:43

+0

我已经添加了一些注释。 – Fionnuala 2010-01-01 12:10:34

+0

谢谢。代码用了8秒,现在需要3秒。 – 2010-01-01 12:35:15