メイン画像

VBScript - データの更新が即時反映されないようにする(トランザクションの使い方)

VBScript - データの更新が即時反映されないようにする(トランザクションの使い方)


トランザクションを使うことで、データの更新がデータベースに即時反映されなくなる。

これにより一連の処理が成功したら反映、そうでないなら取り消しという制御ができるようになる。

トランザクションの開始と終了

Connection オブジェクトが持つ次の3つのメソッドで、トランザクションを制御する。

  • BeginTrans
    新しいトランザクションを開始する。

  • CommitTrans
    現在のトランザクション内で行われた変更を保存し、トランザクションを終了する。

  • RollbackTrans
    現在のトランザクション内で行われた変更を取り消し、トランザクションを終了する。

使用例

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

アカウントを作成 して、もっと沢山の記事を読みませんか?


この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。


この記事にコメントをしてみませんか?


酒とアクアリウムが最近の楽しみ。

おすすめの記事