dbSheetClient

複数のユーザーが同じ(主キー値をもつ)レコードに対して修正後、「サーバーDB更新」を行った場合、後から修正したレコードが上書きされる等の矛盾が生じるのではないでしょうか?

dbSheetClientでは、複数ユーザーによる更新に対し「同時実行制御」を行うため、先に更新をかけたほうのデータがサーバーDBに反映されます。たとえば、前述の「顧客マスター」に対し、AさんとBさんが修正をかける場合を考えてみます。フォームオープンのタイミングで、サーバーDBから「顧客マスター」データが各ローカルにコピーされます。その後2人が「顧客ID=48」のレコードを修正します。AさんがサーバーDBをまず更新します。(“CopySvr_fromLocal”)、次にBさんが更新しようとすると、「他ユーザーがレコードを更新したため、更新はできませんでした。」と警告が表示されます。この場合、Bさんはもういちどサーバーの最新データをローカルに呼び込む必要があります。この方法は「楽観的ロックによる同時実行制御」ですが、もしフォーム上にたくさんの項目がある場合、Bさんが修正した内容がすべてリセットされることになります。これを避けるため、もう一つの手段として、Aさんが修正を開始する直前に対象データをロックしてしまい、Bさんはデータを参照するのみ、という「悲観的ロックによる同時実行制御」も、APIを利用して実現することができます。

なお、dbSheetClientにおける「同時実行制御」のための前提条件として、MDB側とサーバーDB側の全テーブル、全レコードに5つの「DBS制御フィールド」を追加します。DBS制御フィールドの名称は①DBS_STATUS(レコードの状態)、 ②DBS_CREATE_USER(レコード作成者ID)、 ③DBS_CREATE_DATE(レコード作成日時)、 ④DBS_UPDATE_USER(レコード更新者ID)、 ⑤DSB_UPDATE_DATE(レコード更新日時)であり、データ型はいずれも「文字列型」です。


お問い合わせ

お問い合わせフォーム