- 締切済み
排他制御の方法
現在、PWS+ASP+ACCESSを使用し開発を行っていますが排他制御で悩んでいます。 ASPは、ステートレスなセッションでの制御しか出来ないため、ページを表示後のデータの変更はスタンドアロンでの更新のような形になってしまうと思います。 以下のような方法で行っている実例を見たことがありますが、少なからず問題も抱えていると思います。 ・レコード毎に排他フラグを保持する ~ 処理がアベンドした場合にフラグが残る(一定時間後に解除という方法もありますが) ・レコード毎に更新時間を持ち、読込時の更新時間と更新時の更新時間とを比較し更新されていない時だけ更新をかける ~ 後に更新をかけようとした変更が無駄になる 上記の方法以外で、排他制御を実現させる良い方法はないのでしょうか。他の方法で実現しているときは、その方法を教えて頂けませんでしょうか。 ※PWS→IIS、ACCESS→SQLServerに変更する可能性はあります。 (セッションオブジェクト・アプリケーションオブジェクト等を使用しての実現方法など) 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- msystem
- ベストアンサー率42% (79/186)
排他制御なのですが、これは、データベースのデータ整合性をとるための排他制御と考えてよいのでしょうか? もしそうであるなら、排他制御自身をデータベースに任せてはどうでしょうか?もちろんデータベース自身の排他制御にもいくつかの問題点はありますが・・・ たとえば、Webに表示させたデータに対して、更新を行うときに、表示用データを取り出したときに取り出したデータに対し、排他的読み取りをするのであれば、同時ユーザー数の問題で、非常にレスポンスの遅いものになってしまいます。 それでよければ、セッションオブジェクトにロックをかけたレコードセットを格納してはどうでしょうか?もちろん、ロックをかけたレコードセットの開放も忘れないようにしなければなりません。 具体的には、 Set Session("[適当な名前]")=objRecordset とすることで、ロックをかけたレコードセットをステートフルにあつかうことができます。
- hequil
- ベストアンサー率65% (242/372)
無難なのはApplication変数を利用した方法かなぁ~と 手抜きなソースですけど On Error Resume Next Application.Lock Application("lock") = True '--- データベースの更新処理など Application.Unlock If Err.Number <> 0 Then '--- エラー処理(終了処理など) End If On Error Goto 0 こんなのじゃ駄目でしょうか? 参考までに