2011-05-10 73 views
7

我需要執行幾個sql子句,插入,更新和刪除例如。如何在Access中使用事務將它們綁定在一起?在交易中訪問

DAO是優選的。

,如:

BeginTrans 
Excute SQL_1 
Excute SQL_2 
..... 
CommitTrans 

謝謝!

回答

4

如果您使用DAO,您可以使用全局DBEngine對象的BeginTransCommitTrans方法:

Dim db As Database 
Set db = CurrentDb 

DBEngine.BeginTrans 
db.Execute SQL_1 
db.Execute SQL_2 
... 
DBEngine.CommitTrans 
+1

如果有什麼不對交易,我應該在哪裏放置ROLLBACK?在錯誤處理程序? – darkjh 2011-05-10 11:52:32

+1

@darkjh:沒錯。 – Heinzi 2011-05-10 11:59:34

23

這裏是一個更完整的骨架......

Dim ws As DAO.Workspace 
Dim in_trans As Boolean 

Sub Transaction() 
On Error GoTo Trans_Error 
    Set ws = DBEngine.Workspaces(0) 
    in_trans=True 
    ws.BeginTrans 

    <do some SQL stuff; maybe use Err.Raise> 

    ws.CommitTrans 
    in_trans=False 
Trans_Exit: 
    Set ws = Nothing 
    Exit Sub 
Trans_Error: 
    If in_trans = True Then 
     ws.Rollback 
    EndIf 
    Resume Trans_Exit 
End Sub 
+0

+1。這實際上比MS在其文檔中給出的例子要好得多。 – Heinzi 2011-05-11 09:21:47

+0

謝謝!當我拿出答案時,我沒有看到你的...... – darkjh 2011-05-11 13:30:49

+7

我會用''Resume Trans_Exit'替換''在這裏執行你的錯誤處理的其餘部分',因爲記錄錯誤,顯示消息,重新拋出錯誤或返回一些錯誤代碼通常比「默默」回滾更合適。另外,因爲在子內部只需要'ws'和'in_trans',所以我會把它們的聲明放在Sub中。 – Heinzi 2013-11-28 11:45:01