排他制御


Lock  2005-05-31 01:17:03  No: 122057

こんにちは。
排他制御について質問があります。
BeginTransからCommitTransまでに更新処理するテーブルに対して
レコード単位ではなくテーブル単位に排他制御がかかります。
レコード単位に排他制御をかけたいのですが・・・
以下、コードです。
※得意先Mの主キーは得意先CD
    Dim rst      As New ADODB.Recordset

    strBuf = " SELECT 得意先CD"
    strBuf = strBuf & " FROM   得意先M"
    strBuf = strBuf & " WHERE  得意先CD = '1001'
    With rst
        Set .ActiveConnection = conn
        .Open strBuf, conn, adOpenKeyset, adLockPessimistic
        If (.EOF) = False Then
            UpdFlg = True
        End If
        'SQL CLOSE
        .Close
        Set rst = Nothing
    End With
    
    '存在する場合は更新
    If booUpdFlg = True Then
        strBuf = ""
        strBuf = strBuf & " UPDATE 得意先M"
        strBuf = strBuf & " SET    得意先CD.[得意先名]  = '得意先1'
        strBuf = strBuf & " WHERE  得意先CD = '1001'
        conn.Execute (strBuf)
    End If


。。。  2005-05-31 01:37:12  No: 122058

肝心のDataBaseは何よ?
Oracleで話を進めてもいい?無駄に終わりそうだけど・・・。


  2005-05-31 01:41:53  No: 122059

”Select ... For Update ”というSQL文を使って、試してください


Lock  2005-05-31 05:06:21  No: 122060

申し訳ないです。SQL Serverです。


3−t  2005-05-31 06:04:18  No: 122061

こういうことでいいのかな?

http://www.microsoft.com/japan/msdn/library/ja/acdata/ac_8_con_7a_1hf7.asp?frame=true


  2005-05-31 23:18:10  No: 122062

>>    strBuf = " SELECT 得意先CD"
>>    strBuf = strBuf & " FROM   得意先M"
>>    strBuf = strBuf & " WHERE  得意先CD = '1001'
というSQL文ですが、下記のものを追加したら、更新する時行の排他することができると思います。
    conn.BeginTrans
    strBuf = " SELECT 得意先CD"
    strBuf = strBuf & " FROM   得意先M"
    strBuf = strBuf & " WITH (ROWLOCK)"          <----------
    strBuf = strBuf & " WHERE  得意先CD = '1001'

    ’更新処理を行う
    ’
    conn.CommitTrans


medaka  2005-05-31 23:28:05  No: 122063

timestamp列のチェックもした方がいいかも


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加