トランザクションとRunSQLメソッド

RunSQLメソッドではトランザクションが効きません。トランザクション中ではExecuteメソッドを使う必要があります。

以下のサンプルはトランザクション中に、レコードのないテーブルに一件のレコードを追加し、ロールバックでもとに戻すものですが、RunSQLメソッドを使った場合は元に戻らず、トランザクションが効いていないことがわかります。フィールド:f1を持つテーブル:T1を予め作成してこのプロシージャを実行してください。RunSQLの行をコメントにして、Executeメソッドの行のコメントを外して実行するとロールバックで元に戻ります。

1
2
3
4
5
Sub Temp() 
BeginTrans DoCmd.RunSQL "INSERT INTO T1 (F1) VALUES(100)"
' CurrentDb.Execute "INSERT INTO T1 (F1) VALUES(100)", dbFailOnError
Rollback MsgBox "F1(DLookup):" & DLookup("F1", "T1")
End Sub