![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
こんばんは
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件)
- 最新から表示
- 回答順に表示
No.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/ …
の説明が、かなりわかりやすいと思います。
参考にしてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) ACSESS初心者です マンション管理をACCESSで出来ないかとチャレンジしています。 リレーショ 3 2022/10/08 11:45
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Yahoo!メール Yahooアカウントにログインできなくなって困っています。 2 2023/05/16 02:28
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DataGridViewの、選択されてい...
-
レコードが存在しなかった場合
-
ADO VBA 実行時エラー3021
-
アクセスでレポートの1印刷内...
-
ファイル書込みで一行もしくは...
-
差し込み印刷のレコード数について
-
サブレンジ分割されたNDB(富士...
-
JSPのNULLレコード表示について...
-
DataGridViewにてセル以外をク...
-
ヘッダレコードとトレーラレコ...
-
レコードセット(ADO.Recordset)...
-
カレントレコードが無い事を判...
-
Access フォーム 選択されてい...
-
COBOL初心者です。
-
Access を×ボタンで閉じ...
-
VBAで制御コード付きテキストフ...
-
ACCESSで「16389予約済みエラー...
-
固有レコード識別子の選択とは
-
[VB6]プログレスバーコントロー...
-
ADODCとデータグリッドを連動さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ADO VBA 実行時エラー3021
-
ファイル書込みで一行もしくは...
-
JSPのNULLレコード表示について...
-
レコードが存在しなかった場合
-
DataGridViewの、選択されてい...
-
カレントレコードが無い事を判...
-
DataGridViewの内容をDBに反映...
-
Access を×ボタンで閉じ...
-
アクセスでレポートの1印刷内...
-
ヘッダレコードとトレーラレコ...
-
Access でレコードセレクタが押...
-
レコードセット(ADO.Recordset)...
-
ACCESSで大量の更新を行うと「...
-
差し込み印刷のレコード数について
-
DataGridViewにてセル以外をク...
-
サブレンジ分割されたNDB(富士...
-
Line Inputで文字化け(助けて...
-
固有レコード識別子の選択とは
-
[VBA] ADOの Clone と AddNew
-
ワードの差込印刷で教えて下さ...
おすすめ情報