2010-01-01 13 views
5

मेरे पास कई एसक्यूएल संग्रहित प्रक्रियाओं (जैसे अद्यतन, बयानों जांच का चयन करें) एमएस एक्सेस में VBA में मार डाला:रोलबैक एमएस एक्सेस में एकाधिक एसक्यूएल अद्यतन प्रश्नों

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

मुझे यह चाहिए कि:
* यदि qry2 विफल रहता है, तो यह qry1 पूर्ववत करेगा।
* qry1 और qry2 एक ही समय में निष्पादित किए जाते हैं, (क्योंकि मेरे पास श्रृंखला में निष्पादित इन संग्रहित प्रक्रियाओं में से कई हैं), इसलिए प्रक्रिया तेजी से चलती है।

यह कैसे किया जा सकता है?

उत्तर

7

लेन-देन के अनुरूप कर सकते हैं, वे अनुमति देते हैं रोलबैक:

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 

यहाँ एडीओ के लिए कुछ किसी न किसी नोट दिए गए हैं:

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 
http://msdn.microsoft.com/en-us/library/bb243155.aspx

संपादित

यहाँ डीएओ में एक मोटा उदाहरण है

+0

मुझे रिकॉर्डसेट के लिए इस्तेमाल होने वाले लेनदेन के बारे में पता है। लेकिन क्या वे एसक्यूएल स्टेटमेंट के लिए इस्तेमाल किया जा सकता है? –

+0

मैंने कुछ नोट्स जोड़े हैं। – Fionnuala

+0

धन्यवाद। 8 सेकंड लेने के लिए इस्तेमाल किया जाने वाला कोड, अब इसमें 3 सेकंड लगते हैं। –

संबंधित मुद्दे