ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

EXCEL VBAコミュのトランザクション処理が必要か否か?

  • mixiチェック
  • このエントリーをはてなブックマークに追加
質問させて下さい。下記の箇所において、
トランザクション処理がなくても、
4つのSQL文が、すべて正しくDBでの更新を
行ったら、コミットするようにしたいと思っています。
しかしトランザクション処理を使うと、
複数台同時にサーバへこの処理を行うと
衝突が起きて、どちらかが、正しく処理されません。
このように、4つのSQL文をひとつの変数にまとめて
ひとつのExecuteで実行した場合も、
トランザクション処理が必要なのでしょうか?


Public Sub DBInsertUpdate1()
 Dim i As Integer
 Dim sql,sql1,sql2,sql3,sql4,DBInfor As String
 DBInfor = "Provider=SQLOLEDB;" _
      & "Data Source=鯖IP;" _
      & "Initial Catalog=DBNAME;" _
      & "User ID = id; Password= psswd;"

 For i=1 To 500 Step 1
  'ここでif文でsql文を4つ生成する。
  sql = sql1 & sql2 & sql3 & sql4

  if ある条件 Then
    Dim cn As Object
    Set cn = CreateObject("ADODB.Connection")
    cn.ConnectionString = DBInfor
    cn.Open
    '■ここにcn.BeginTransが必要か?
    On Error Resume Next
    cn.Execute sql
    'このsqlという変数に4つのSQL文がまとめられてる
    If Err.Number = 0 Then
      '■ここにCommitTransが必要か?
    Else
      '■ここにRollbackTransが必要か?
      Err.Clear
      cn.Close
      Exit Sub
    End if
    On Error GoTo 0
    cn.Close
  End if
 Next i
End Sub

コメント(2)

BeginTranしないと、CommitもRollbackもできません。
トランザクションの開始と終了は、いくつSQL実行しようと
最初と最後の1回です。
使用されている RDB が解りませんが、面倒であれば、 RDB 側でコミットを取れば簡単です。(処理がそれほど集中しなければですが。)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

EXCEL VBA 更新情報

EXCEL VBAのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。