- 締切済み
SQLServerでのテーブルロック
・WindowsXP Pro SP3 ・VB2008 ・SQLServer2000 SP4 上記環境にて開発を行っております。 質問は、データベース内のマスタを、非接続型のグリッド上に読込、 内容を編集後、更新を行う処理を作成しています。 グリッド上に読み込んだ際(Select文)、テーブルをロックし、 他のユーザが変更出来ないようにしたいのですが、方法が分かりま せん。 教えて頂けないでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Tiffa9900
- ベストアンサー率31% (68/216)
申し訳ありません。 VBとの連携となるとちょっと知識がないので、何ともいえないのですが、 http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog_08/vsdbprog_08_03.html この辺のサイトが参考になるのではないでしょうか。 状況から判断すると、どこかのタイミングでトランザクションが切れてしまっているようですね。 > また、Select文発行時に、ロックされているか判定する方法も教えて頂けないでしょうか。 sql_lockなどのコマンドでロックされているオブジェクトがあるか?は確認できたような気はしますが、この情報だけではどのテーブルが?までは分からなかった気がします。 現在、SQL-Serverの環境が無い為、また後ほど回答させてください。 ちょっとできるか自信がありませんが。 なんか、総じてあまりお役に立てずに申し訳ありません。
- Tiffa9900
- ベストアンサー率31% (68/216)
現状、実際に検証環境が無い為にあやしいですが。 VBで画面に呼び出す前のタイミングでトランザクションをかけ、 SELECT * FROM ~ WITH (TABLOCK, HOLDLOCK) とWITH指定して行を呼び出し、 「取消」や「確定」ボタンのアクションで画面から表示を開放した後のタイミングでトランザクションを開放すればよいのではないでしょうか? ただ、問題点としては、 アプリが異常終了した際や「×」で閉じた場合に、ロックが開放されるかどうかですね。 下記URLの例題6あたりが近いかな。 http://www.atmarkit.co.jp/fnetwork/rensai/sql28/sql1.html
お礼
早速ありがと御座いました。 テーブルロックは出来ました。 しかし、トランザクションの開放が上手くいきません。 Form_Loadイベントにて「Using」を使用して、その中でSelect文を発行(同時にBegining Transactionも発行)しています。 そして「更新」ボタンクリックイベントにて、RollBack文を発行し解放しようとしているのですが、「Begining Transactionが見つかりません」のようなエラーが出ます。 Begining発行のイベントと開放のイベントが異なりSqlConnectionが変わってしまっているからだとは思うのですが・・・ Using句を使用しているので、わざわざ開放する必要がないのでしょうか? また、Select文発行時に、ロックされているか判定する方法も教えて頂けないでしょうか。
お礼
わざわざ調べて頂く様な形になり、申し訳ありません。 よろしくお願いします。