access応用・ツール・実例 PR

Access VBAでトランザクション処理を使う方法|BeginTrans・Commit・Rollback完全解説【実務向け】

記事内に商品プロモーションを含む場合があります

導入文

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で複数更新処理を行う場合は、
必ずトランザクション処理を取り入れましょう。

関連記事