Access(データベース)におけるトランザクション処理は、複数のデータベース操作を1つの作業単位(論理的な単位)にまとめ、全体が成功するか失敗するかを保証するための重要な仕組みです。
この記事では、DAO(Data Access Objects)を使用したAccess VBAでのトランザクション処理の基本的な実装方法とサンプルコードを解説します。
トランザクションとは
トランザクションとは、一連の操作を1つにまとめて処理する概念です。トランザクションを構成する処理はその全体が完了する必要があり、一部が失敗すると全体がロールバック(取り消し)されます。
- 原子性(Atomicity): トランザクション内の処理がすべて実行されるか、全く実行されないかのどちらかになります。
- 一貫性(Consistency): 処理の前後でデータの整合性が保たれます。
- 独立性(Isolation): 処理中の変更が他のトランザクションから隠蔽されます。
- 持続性(Durability): コミットされた変更は確実に保存されます。
Access VBAでのトランザクション実装サンプル
以下は、DAOのWorkspaceオブジェクトを使用してトランザクションを制御するサンプルコードです。
Sub ChangeTitle()
Dim wrkCurrent As DAO.Workspace
Dim dbsNorthwind As DAO.Database
Dim rstEmployee As DAO.Recordset
On Error GoTo ErrorHandler
' ワークスペースとデータベースの取得
Set wrkCurrent = DBEngine.Workspaces(0)
Set dbsNorthwind = CurrentDb
Set rstEmployee = dbsNorthwind.OpenRecordset("Employees")
' トランザクションの開始
wrkCurrent.BeginTrans
Do Until rstEmployee.EOF
If rstEmployee!Title = "Sales Representative" Then
rstEmployee.Edit
rstEmployee!Title = "Sales Associate"
rstEmployee.Update
End If
rstEmployee.MoveNext
Loop
' ユーザーに保存を確認または自動判定
If MsgBox("変更を保存しますか?", vbQuestion + vbYesNo) = vbYes Then
' すべての変更を確定
wrkCurrent.CommitTrans
Else
' すべての変更を破棄
wrkCurrent.Rollback
End If
GoTo Cleanup
ErrorHandler:
' エラーが発生した場合は変更を破棄
wrkCurrent.Rollback
MsgBox "エラーが発生しました: " & Err.Number & vbCrLf & Err.Description
Cleanup:
' オブジェクトの解放
If Not rstEmployee Is Nothing Then rstEmployee.Close
If Not dbsNorthwind Is Nothing Then dbsNorthwind.Close
If Not wrkCurrent Is Nothing Then wrkCurrent.Close
Set rstEmployee = Nothing
Set dbsNorthwind = Nothing
Set wrkCurrent = Nothing
End Sub
実装のポイント
- BeginTrans: トランザクションを開始します。このメソッド呼び出し以降の変更は一時的なものとなります。
- CommitTrans: トランザクション内のすべての変更をデータベースに永続的に書き込みます。
- Rollback: エラー発生時や処理の中止時に、トランザクション開始前の状態へ戻します。
まとめ
トランザクション処理を適切に組み込むことで、予期せぬエラーや途中のデータ破損からデータベースを守ることができます。エラーハンドリング(On Error GoTo ErrorHandler)と組み合わせて確実にロールバック処理を実装することが重要です。
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月12日
- 変更リンク切れとなっていた旧MSDNおよびWikipediaへの参照を、Microsoft公式ドキュメントに基づく適切な解説に更新しました。
- 変更引用ブロックやHTMLタグで崩れていたVBAコードを、正しいインデントと構造を持つコードブロックとして再構成しました。
- 追加エラー発生時のロールバック処理を明示した実践的なトランザクションの解説を追加しました。

