|
こんばんわ。
>>Q3
>>最新状態を表示するシステム上の必要性がある場合は、上記のようなフォームのプロパティで更新をコントロールしたほうが良いと思います。
>
>についてなんですが
>Set RS = DB.OpenRecordset(strSql, dbOpenSnapshot)
>Set RS = DB.OpenRecordset(strSql, dbOpenDynaset)
>どちらも
>forms("メインフォーム").Controls("サブフォーム").requery
>で、更新データを表示することは出来ました
>これを
>タイマー等で動作させる
>という理解でよろしいでしょうか
タイマー、もしくはイベントでリクエリするのでよいと思います。
リクエリのタイミングや必要性は業務用件に関わってくるため、こちらからはなんとも言えませんが。
排他チェックについてですが、
MDBファイルレベルの排他と
ページレベルの排他
が考えられます。
的外れだったらすみません。
MDBファイルレベルの排他は、OpenDatabaseメソッドでMDBをオープンする際の引数optionsに
Trueを設定することで行います。この場合、他のユーザーがDBオープンしようとするとエラーとなるそうです。詳しくはOpendatabaseメソッドのヘルプを参照してください。
上記の方式でDBをオープンするようにしてからもう一度試してみてください。
ページレベルの排他は、必ず1行がロックされるわけではないので使用は控えた方が良いようです。
1行単位にロックをかけたい場合は、テーブルにロックのためにカラムを設け、たとえば
0だったらロックされていない、1だったらロックされているという仕様にします。
その上で、各APP.DBがデータにアクセスするとき、対照のデータのロックステータスを確認し、
1だったら待機、0だったら1に更新して、処理終了後0に戻す
などが考えられます。
1、0をユーザーID、NULLに置き換えることも設計上は可能です。プログラムが増えることと、チェックロジックのために処理が若干遅くなる事が考えられます。
|
|