2010-01-01 6 views
5

Ich habe mehrere gespeicherte SQL-Prozeduren (zB UPDATE, SELECT INTO-Anweisungen) in VBA in MS Access ausgeführt:Zurücksetzen Mehrere SQL-Update-Abfragen in MS Access

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

Ich möchte es so, dass:
* Wenn Qry2 fehlschlägt, wird Qry1 rückgängig gemacht.
* qry1 und qry2 werden zur gleichen Zeit ausgeführt (da viele dieser gespeicherten Prozeduren in einer Kette ausgeführt werden), wird die Prozedur schneller ausgeführt.

Wie kann das gemacht werden?

Antwort

7

Transaktionen anpassen können, erlauben sie Rollback: http://msdn.microsoft.com/en-us/library/bb243155.aspx

EDIT

hier ein grobes Beispiel in DAO ist:

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 

Hier sind einige grobe Hinweise für 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

Ich weiß, dass Transaktionen für Recordsets verwendet werden. Aber können sie für SQL-Anweisungen verwendet werden? –

+0

Ich habe ein paar Notizen hinzugefügt. – Fionnuala

+0

Danke. Der Code dauerte 8 Sekunden, jetzt dauert es 3 Sekunden. –