У меня есть несколько хранимых процедур SQL (например, Обновление, операторы SELECT INTO) выполняемый в VBA в Доступе MS:
CurrentDb. Выполните "qry1"
CurrentDb. Выполните "qry2"
Я хочу это так, чтобы:
*, если qry2 перестал работать, он отменит qry1.
* qry1 и qry2 выполняются одновременно, (поскольку у меня есть многие из этих хранимых процедур, выполняемых в цепочке), таким образом, процедура работает быстрее.
Как это может быть сделано?
Сделки могут подходить, они допускают откат: http://msdn.microsoft.com/en-us/library/bb243155.aspx
EDIT
Вот пример в 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