2010-01-01 2 views
5

У меня есть несколько SQL хранимых процедур (например, UPDATE, SELECT INTO заявления), выполненные в VBA в MS Access:Откат Multiple обновление SQL запросов в MS Access

CurrentDb.Execute "QRY1"
CurrentDb.Execute "qry2"

Я хочу это так:
* Если qry2 не работает, он отменит qry1.
* qry1 и qry2 выполняются в одно и то же время (поскольку у меня есть многие из этих хранимых процедур, выполняемых в цепочке), поэтому процедура выполняется быстрее.

Как это можно сделать?

ответ

7

Сделки могут подойти, они позволяют Откат: 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 
+0

Мне известны транзакции, используемые для наборов записей. Но могут ли они использоваться для операторов SQL? –

+0

Я добавил несколько заметок. – Fionnuala

+0

Спасибо. Код, используемый для выполнения 8 секунд, теперь занимает 3 секунды. –