導入文
Accessで複数のデータ更新処理を行う場合、
途中でエラーが発生すると「一部だけ更新されてしまう」ことがあります。
このような問題を防ぐために使うのが
トランザクション処理(BeginTrans / Commit / Rollback) です。
この記事では、Access VBAでトランザクションを使う基本構文から、
実務でそのまま使えるサンプルコードまでを分かりやすく解説します。
トランザクション処理とは?
トランザクションとは、
複数の処理を「ひとまとまり」として扱い、
すべて成功したら確定、失敗したら元に戻す仕組み
です。
例:
-
伝票テーブルに登録
-
在庫テーブルを更新
→ どちらか失敗したら両方キャンセルする
トランザクションを使わないとどうなる?
トランザクションなしの場合:
CurrentDb.Execute “INSERT INTO 伝票 VALUES(…)”
CurrentDb.Execute “UPDATE 在庫 SET 数量 = 数量 – 1”
途中でエラーが出ると…
❌ 伝票だけ登録
❌ 在庫は更新されない
→ データ不整合が発生
基本構文(BeginTrans / Commit / Rollback)
Dim db As DAO.Database
Set db = CurrentDb
On Error GoTo Err_Handler
db.BeginTrans
db.Execute “INSERT INTO 伝票 VALUES(…)”
db.Execute “UPDATE 在庫 SET 数量 = 数量 – 1”
db.CommitTrans
MsgBox “処理が完了しました”
Exit Sub
Err_Handler:
db.Rollback
MsgBox “エラーが発生したため処理を取り消しました”
Accessで使える「条件付きUPDATEクエリ」の基本と実例
実務で使える具体例(2テーブル更新)
Dim db As DAO.Database
Set db = CurrentDb
On Error GoTo Err_Handler
db.BeginTrans
db.Execute “UPDATE 売上 SET 金額 = 金額 + 1000 WHERE ID = 1”, dbFailOnError
db.Execute “UPDATE 入金 SET 金額 = 金額 + 1000 WHERE ID = 1”, dbFailOnError
db.CommitTrans
MsgBox “更新完了”
Exit Sub
Err_Handler:
db.Rollback
MsgBox “更新を元に戻しました”
dbFailOnErrorを必ず付ける理由
db.Execute SQL, dbFailOnError
これを付けないと、
-
エラーでもRollbackされない
-
気づかないまま処理が進む
危険があります。
Access VBAでクエリをVBAから実行する方法まとめ|DoCmd・QueryDef・SQL完全ガイド
トランザクションが使えないケース
-
SELECTクエリのみ
-
フォームのレコード保存
-
外部DB(制限あり)
※ UPDATE / INSERT / DELETE が対象
よくあるエラーと注意点
-
BeginTrans後にCommitを忘れる
-
エラー処理を書かない
-
Rollback後に再実行しない
-
DAOとADOを混在させない
Access VBAエラー対策チェックリスト|実務でハマる原因と解決ポイント総まとめ
既存記事との内部リンク案
文中に:
-
「Accessで条件付きUPDATEクエリの基本と実例」
-
「Access VBAでクエリをVBAから実行する方法まとめ」
-
「Access VBAエラー対策チェックリスト」
へのリンクを設置するとSEOが強くなります。
まとめ
トランザクション処理を使うことで、
-
データの整合性を守れる
-
実務システムとして信頼性が上がる
-
エラー時の復旧が簡単になる
Access VBAで複数更新処理を行う場合は、
必ずトランザクション処理を取り入れましょう。
関連記事