#767 トランザクション処理の基本構文 VBA

トランザクション処理とは、テーブルに対する単一あるいは複数の追加・更新・削除といった操作を1つにまとめて処理することです。一連の処理をメモリ上で行い、コミットすることで一気にディスクに書き込みます。途中でエラーが発生したり条件に合わない状況になったとき、それまでの処理結果を元に戻すことができます。たとえば関連性の高い2つのテーブルに対する処理において、一方でエラーが発生したときにもう一方を元に戻すことで、両者のデータの整合性を保つことができます。

VBAでのトランザクション処理の基本構文には次のようなものがあります。「BeginTrans」、「CommitTrans」、「Rollback」の3つ命令(正確にはDBEngineオブジェクトのメソッドで”DBEngine.”を省略したもの)を使います。

■条件によって処理を中断する場合

BeginTrans          'トランザクション処理の開始
(一方のテーブルに対する一連の処理を実行)

If 〇〇〇 Then
  (条件を満たすときはもう一方のテーブルに対する一連の処理を実行)
  CommitTrans       'コミットしてデータを正式に保存する

Else
  (条件を満たさないときはロールバックして最初のテーブルに対する処理を元に戻す)
  Rollback          'ロールバックする

End If


■エラー発生時に処理を中断する場合

On Error GoTo Err_Handler

BeginTrans          'トランザクション処理の開始
(一方のテーブルに対する一連の処理を実行)
(もう一方のテーブルに対する一連の処理を実行)

CommitTrans         'コミットしてデータを正式に保存する

Exit_Here:
  Exit Sub

Err_Handler:
  Rollback          'エラーが発生したらロールバックする
  Resume Exit_Here:


※エラールーチンではロールバックしていますが、このケースではCommitTransは実行されずにプロシージャを抜けるため、実際にはなくても同じ結果になります。

コード例:

Dim dbs As Database
Dim rstJ As Recordset
Dim rstM As Recordset
Dim lngID As Long

On Error GoTo Err_Handler

Set dbs = CurrentDb

Set rstJ = dbs.OpenRecordset("tbl受注")
Set rstM = dbs.OpenRecordset("tbl受注明細")

BeginTrans          'トランザクションの開始

  With rstJ         'tbl受注へのレコード追加処理
    .AddNew
      !社員ID = 9
      !得意先ID = 27
      !出荷先名 = "世田谷倉庫"
      lngID = !受注ID
    .Update
    .Close
  End With

  With rstM         'tbl受注明細へのレコード追加処理
    .AddNew
      !受注ID = lngID
      !商品コード = "4901340073722"
      !数量 = 40
      !単価 = 478
    .Update
    .Close
  End With

CommitTrans         'コミット

Exit_Here:
  Exit Sub

Err_Handler:
  Rollback            'ロールバック
  Beep
  MsgBox "エラー番号:" & Err.Number & vbCrLf & _
          "エラー内容:" & Err.Description, vbOKOnly + vbCritical
  Resume Exit_Here:

| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved