- Home >dbSheetの機能・制限事項 >データベース制御(照会・更新・削除)などの機能・制限事項 >Access版で複数のユーザーが同じ(主キー値をもつ)レコードに対して修正後、「サーバーDB更新」を行った場合、後から修正したレコードが上書きされる等の矛盾が生じるのではないでしょうか?
Q. Access版で複数のユーザーが同じ(主キー値をもつ)レコードに対して修正後、「サーバーDB更新」を行った場合、後から修正したレコードが上書きされる等の矛盾が生じるのではないでしょうか?
Answer
サンプル事例
dbSheetでは、複数ユーザーによる更新に対し「同時実行制御」を行うため、先に更新をかけたほうのデータがサーバーDBに反映されます。
たとえば、前述の「顧客マスター」に対し、AさんとBさんが修正をかける場合を考えてみます。
フォームオープンのタイミングで、サーバーDBから「顧客マスター」データが各ローカルにコピーされます。
その後2人が「顧客ID=48」のレコードを修正します。
AさんがサーバーDBをまず更新します。
(“CopySvr_fromLocal”)、次にBさんが更新しようとすると、「他ユーザーがレコードを更新したため、更新はできませんでした。」と警告が表示されます。この場合、Bさんはもういちどサーバーの最新データをローカルに呼び込む必要があります。
この方法は「楽観的ロックによる同時実行制御」ですが、もしフォーム上にたくさんの項目がある場合、Bさんが修正した内容がすべてリセットされることになります。
これを避けるため、もう一つの手段として、Aさんが修正を開始する直前に対象データをロックしてしまい、Bさんはデータを参照するのみ、という「悲観的ロックによる同時実行制御」も、APIを利用して実現することができます。
なお、dbSheetにおける「同時実行制御」のための前提条件として、MDB側とサーバーDB側の全テーブル、全レコードに5つの「DBS制御フィールド」を追加します。
DBS制御フィールドの名称は①DBS_STATUS(レコードの状態)、 ②DBS_CREATE_USER(レコード作成者ID)、 ③DBS_CREATE_DATE(レコード作成日時)、 ④DBS_UPDATE_USER(レコード更新者ID)、 ⑤DSB_UPDATE_DATE(レコード更新日時)であり、データ型はいずれも「文字列型」です。
オンラインヘルプの改善にご協力ください。
このページは役に立ちましたか?