次の方法で共有

ADOのレコードセットによるレコードロックの開放待ち時間について

Anonymous
2013-12-12T05:48:02+00:00

Access2007をWindowsXPで使用しています。

MDBファイルをプログラムとデータで分け、データはサーバーに

プログラムは各端末に置きサーバーのデータMDB内のテーブルを

リンクしています。

ADOのレコードセットによるレコードロックに関して質問します。

まず以下のようにしてコネクションを開きます。

Dim cnn As ADODB.Connection

Set cnn = New ADODB.Connection

cnn.ConnectionString = CurrentProject.BaseConnectionString

cnn.Open

次に以下のようにしてレコードセットを開きます

Dim rst As ADODB.Recordset

Set rst = New ADODB.Recordset

rst.Open "(SELECT文)", cnn, adOpenStatic, adLockPessimistic

上記のようにして開いたレコードセットのフィールドに値を代入して

編集状態に入ると、UpdateかCancelUpdateするまでそのレコードが

ロックされます。

(テーブルを開くとそのレコードの左端に鍵マークがついた状態です)

この状態で、他の端末が同じ方法で同じレコードのフィールドに値を代入した場合、

そこで処理が止まり(ロックの開放待ち状態と考えられます)、およそ3秒以内に

開放されないと例外エラーが発生します。

そこで、そのエラーをトラップして「他の端末で操作中」という旨のメッセージを出しています。

ここで本題なのですが、現状で約3秒の開放待ち時間をもっと延ばす方法はないでしょうか?

CommandTimeoutプロパティはヘルプを読むとExecuteメソッドに対するものであり、

既定値も30秒とされているので違うように思います。

どなたかご存知の方がおられましたら宜しくお願いします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2013-12-15T03:59:02+00:00

MukkuMukuです。

待ち時間の調整はできたっけかな?

後出し側の更新が実行時エラー発生前に更新できるようになったとしても取得したレコードセットは過去のものとなっている可能性があるから再度取得から再試行を盛り込む感じでしょうか。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

2 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2013-12-15T10:13:31+00:00

    MukkuMukuさん、お返事ありがとうございます。

    なるほど・・・再試行ロジックを組み込むしかないということですか・・・

    ちょっと考えてみます。ありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2013-12-13T00:52:52+00:00

    tarosuke さん、こんにちは。

    マイクロソフト コミュニティ への投稿ありがとうございます。

    VBA についての質問の場合、当フォーラムでは情報が集まりにくいことがあるようです。

    ある程度待ってもコメントが寄せられない時は、開発者の方々が情報交換を行っている MSDN フォーラムを利用して情報を集めるのがよいかもしれません。

    MSDN の VBA フォーラム

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません