#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: |
|||
|
Copyright © T'sWare All rights reserved |