5
我在MS Access VBA中执行多个SQL存储过程(如UPDATE,SELECT INTO语句):回滚多个SQL更新查询
CurrentDb.Execute “qry1”
CurrentDb.Execute “qry2”
我想要它:
*如果qry2失败,它将撤消qry1。
* qry1和qry2同时执行(因为我有很多这样的存储过程在链中执行),所以过程运行得更快。
这怎么办?
我在MS Access VBA中执行多个SQL存储过程(如UPDATE,SELECT INTO语句):回滚多个SQL更新查询
CurrentDb.Execute “qry1”
CurrentDb.Execute “qry2”
我想要它:
*如果qry2失败,它将撤消qry1。
* qry1和qry2同时执行(因为我有很多这样的存储过程在链中执行),所以过程运行得更快。
这怎么办?
交易可能适合,它们允许回滚: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语句吗? – 2010-01-01 03:17:43
我已经添加了一些注释。 – Fionnuala 2010-01-01 12:10:34
谢谢。代码用了8秒,现在需要3秒。 – 2010-01-01 12:35:15