トランザクションを使うことで、データの更新がデータベースに即時反映されなくなる。
これにより一連の処理が成功したら反映、そうでないなら取り消しという制御ができるようになる。
トランザクションの開始と終了
Connection オブジェクトが持つ次の3つのメソッドで、トランザクションを制御する。
BeginTrans:
新しいトランザクションを開始する。
使用例
Update や Delete を呼び出しても、その時点ではデータベースには反映されない。
CommitTrans を呼び出したタイミングで一括して反映される。
Dim conn Set conn = CreateObject("ADODB.Connection") conn.Open "Provider=OraOLEDB.Oracle;User ID=scott;Password=tiger;Data Source=ORCL;" 'トランザクションを開始 conn.BeginTrans 'レコードセットを開く Dim rst Set rst = CreateObject("ADODB.Recordset") rst.Open "select DEPTNO, DNAME, LOC from DEPT order by DEPTNO", _ conn, _ 3, _ 3 'レコードを削除する rst.MoveFirst Do While Not rst.EOF If rst.Fields("DEPTNO").Value = "50" Then rst.Delete End If rst.MoveNext Loop 'レコードを追加する rst.AddNew rst.Fields("DEPTNO").Value = "50" rst.Fields("DNAME").Value = "NEWDEPT" rst.Fields("LOC").Value = "" rst.Update 'レコードを更新する rst.MoveFirst Do While Not rst.EOF If rst.Fields("DEPTNO").Value = "50" Then rst.Fields("LOC").Value = "QUINCY" rst.Update End If rst.MoveNext Loop '変更を保存してトランザクションを終了 conn.CommitTrans 'TODO: 変更を取り消してトランザクションを終了する場合はこちら '''conn.RollbackTrans 'レコードセットを閉じる If rst.State <> 0 Then rst.Close End If Set rst = Nothing '接続を切る If conn.State <> 0 Then conn.Close End If Set conn = Nothing