dポイントプレゼントキャンペーン実施中!

こんばんは
ASP(VBスクリプト)で MDBファイル(アクセス2000)の
データベースを 更新 又は レコード追加 をさせるときの
ロックについて悩んでいます。

まず条件として
このMDBファイルは 複数のユーザーが共有する物です。
(ここでは仮に A B C と3つのユーザーとします)

データの新規登録の時(レコードの追加)はレコード内の項目で
絶対重複しないIDを発行して登録します。
逆に更新の時は そのIDを基に該当レコードを更新します。

また、IDはA*** B*** C*** と言うように
各ユーザーの固有ID+重複しない番号 と言う内容にしています

二重書き込み防止のために色々考えているのですが

このIDを基にした方法だと 基本的にはAというユーザーが
同じIDの情報を複数のブラウザ開かない限り二重書き込みには
ならないと思っています。
(変更登録などはパスワードで管理して物理的に1人(1画面)しかできないようにしています)

なので物理的な2重書き込みはこれで防止できると思っているのですが
正しいでしょうか?

ただ、ものすごく悩んでいるのが
1人が1つのデータベースをさわっているのなら良いのですが
複数人が同時に使っている場合、レコードが服従することはないので
2重書き込みはないとしても

Aのデータを更新しているときに Bが新しく情報を追加したと言うような
事は起こるはずなので、ファイルが壊れないかと心配しています。

なので cgiで言うような書き込みロックのような事が
ASPでもできるのかなと思っています。

ただ、それ以前に こういった使い方はダメでしょうか?
(1つを複数人で使うこと)

良くない場合は A、B、C それぞれデータベースを作り
それを結合させた方が賢明なのかなとも思っています。

ロックの方法でやるか
個々に作って結合させるか
それ以外にもよい方法があるのか

これで悩んでします。

また、ロックの場合
Updateではなく
Recordsetオブジェクトを使って
IDがあれば更新 なければ 追加 と言う方法にしようと
思っていまして
その場合 OPENメソッド
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
で、ロックタイプを3にしても これはUpdateの時だけ有効のようなので 意味がないのかなと思っています
ただ MSのHPでの解説で
>>レコード単位の共有的ロックを示します。Update メソッドを呼び出した場合にのみ、プロバイダは共有的ロックを使ってレコードをロックします。
と書いているのですが、そもそも
>>共有的ロックを使ってレコードをロック
と言う意味が分かっていません

ファイルを壊さないためにも有効であるなら
Updateを使う方法に変えようかとも思うのですが、どうなんでしょうか?

なんか 基礎的なことが分かっていないので 分かりにくい質問になりましたが
ファイルが壊れないような処理方法を作っていきたいので、ご教授のほど よろしくお願いします。

A 回答 (1件)

まず、データベースアクセスメソッドを経由して


アクセスしていれば、複数人が同時にアクセスしても
データベースファイル(mdbファイル)そのものが
壊れることはありません。これがデータベースの大きな利点です。
(これがファイル直接更新であれば、複数人が1ファイルを同時更新して
壊れる可能性(ファイルロック)を考える必要があります。)

ただし、データベースの場合でも、テーブル内の1つの
レコードを複数人が同時更新しようとした場合に
どうするか(レコードロック)を考える必要があります。

ご質問の設計だと、AとBが同時に1つのレコードにアクセスすることは
ないようなので、ロックのことはさほど気にせず、一つのデータベース
を使うことでよいように思います。

「UpdateではなくRecordsetオブジェクトを使って」とありますが、
Microsoftの説明にあるUpdateとは、Recordsetオブジェクトの
Updateメソッドのことだと思います。Recordsetを更新する場合でも、
暗黙で自動Updateされることはありますが、基本的にUpdeteメソッドを
明示的に発行すべきです。

Recordset等のADOの使い方は、もう少し勉強した方がよいように思います。
http://msdn.microsoft.com/library/ja/default.asp …
のようなMicrosoftのドキュメントがバイブルになりますが、
少しわかりにくいところもあるので、
http://www.accessclub.jp/ado/index.html
のような入門サイトで雰囲気を掴んでから、正確な仕様を
Microsoftのドキュメントで再確認する習慣をつけるとよいと思います。

Recordsetの共有的ロック(adLockOptimistic)と排他的ロック(adLockPessimistic)の違いは、
Microsoftの説明はものすごくわかりにくいですが、
http://www.itmedia.co.jp/help/howto/win/win2000/ …
http://www.itmedia.co.jp/help/howto/win/win2000/ …
の説明が、かなりわかりやすいと思います。
参考にしてみてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!