トランザクション処理を行う

トランザクション処理を行う

Sub トランザクション1()
Dim myCon As ADODB.Connection, myCmd As ADODB.Command
Dim myFile As String, myCmdTxt1 As String, myCmdTxt2 As String

myFile = ThisWorkbook.Path & "\mdb\4-sampleDB.mdb"

Set myCon = New ADODB.Connection
myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myFile
Set myCmd = New ADODB.Command
myCmd.ActiveConnection = myCon

'2つの処理をまとめてトランザクション処理を行う
myCmdTxt1 = "UPDATE アルバイト SET 手当 = 手当 + 5000;"
myCmdTxt2 = "UPDATE 勤務履歴 SET 労働時間 = 0;"

On Error GoTo Trans_Err 'エラートラップ

myCon.BeginTrans                '<--*トランザクション処理スタート
  myCmd.CommandText = myCmdTxt1
  myCmd.Execute                 '<--1つ目の処理を実行
  myCmd.CommandText = myCmdTxt2
  myCmd.Execute                 '<--2つ目の処理を実行
myCon.CommitTrans               '<--ここで、変更をまとめて書き込む

Set myCmd = Nothing
myCon.Close: Set myCon = Nothing

Exit Sub

Trans_Err:    'エラー時の処理
  MsgBox "エラーが発生しました。変更を破棄して終了します。"
  '変更を破棄し、トランザクション処理前の状態に戻す
  myCon.RollbackTrans
  Set myCmd = Nothing
  myCon.Close: Set myCon = Nothing

End Sub

トランザクション処理とは、データベースのデータおよび構造に対して行われる一連の変更を一括して行う処理のこと。
大量のデータを処理する場合には、データベースにアクセスする回数が減るため、一般の変更・更新処理と比較すると、高速で安全に作業できる。

BeginTransメソッド以降にデータベースに対して行った処理は、データベース側には、反映されず、まずメモリ内で処理される。
全ての処理を行った所でCommitTransメソッドを使用して、変更をデータベースに一括反映する。

トランザクション処理中に何らかのエラーが起きて変更を破棄したい場合は、RollbackTransメソッドを使用する。
これにより、全ての変更が破棄される。

トランザクション処理で使用するメソッド
メソッド 内容
BeginTrans トランザクション処理を開始する
CommitTrans BeginTrans記述後の変更処理を反映し、トランザクション処理を終了する
RollbackTrans BeginTrans記述後の変更処理をすべて破棄し、トランザクション処理を終了する

実行結果
「アルバイト」テーブル


「職務履歴」テーブル