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
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。
この記事にコメントをしてみませんか?