【Access】トランザクション処理のサンプル

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

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コードを、正しいインデントと構造を持つコードブロックとして再構成しました。
  • 追加エラー発生時のロールバック処理を明示した実践的なトランザクションの解説を追加しました。

文書情報

記事タイトル
【Access】トランザクション処理のサンプル
作成日
更新日
Source URL
https://papanda925.com/?p=537

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました