2010-01-01 40 views
5

Tôi có nhiều SQL được lưu trữ thủ tục (ví dụ UPDATE, SELECT INTO báo cáo) thực hiện trong VBA trong MS Access:Rollback Nhiều SQL cập nhật các truy vấn trong MS Access

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

Tôi muốn nó để:
* nếu qry2 không thành công, nó sẽ hoàn tác qry1.
* qry1 và qry2 được thực hiện cùng một lúc, (vì tôi có nhiều thủ tục được lưu trữ được thực hiện trong một chuỗi), do đó quy trình chạy nhanh hơn.

Làm cách nào để thực hiện điều này?

Trả lời

7

giao dịch có thể phù hợp, chúng cho phép rollback: http://msdn.microsoft.com/en-us/library/bb243155.aspx

EDIT

Dưới đây là một ví dụ thô trong 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 

Dưới đây là một số lưu ý thô cho 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

Tôi biết các giao dịch đang được sử dụng cho các bản ghi. Nhưng chúng có thể được sử dụng cho các câu lệnh SQL không? –

+0

Tôi đã thêm một vài ghi chú. – Fionnuala

+0

Cảm ơn. Mã được sử dụng để mất 8 giây, bây giờ phải mất 3 giây. –

Các vấn đề liên quan