【会員アンケートご協力のお願い】抽選で計5名様に役立つ書籍をプレゼント!

Access (VBA)

Access VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 11 Pro : Access 2019)
クライアントサーバーの考え方
投稿日時: 24/11/18 19:54:16
投稿者: kkkc

クライアントサーバーについて教えてください。
なお、クライアントサーバーの意味を間違えていたらすみません。
 
バックエンドはSQL Server Expressで、フロントエンドはAccess2019です。
SQL ServerのテーブルをAccess側でリンクテーブルとしてします。
 
Accessのフォームで日付を指定すると、
その日のイベントに参加する人のデーターをワークテーブルにコピーして、
表形式のサブフォームで修正します。
 
表形式のサブフォームのレコードソースはワークテーブルになっています。
フォームを閉じると、ワークテーブルの全レコードをリンクテーブルに書き込みます。
実際には1件も修正していない場合でも、
全レコード更新するようになります。
 
現在、それで問題なく動いているのですが、
同じ日付のイベントを同時に開く可能性が出てきました。
 
例えば、AさんもBさんも11/30のイベントを開いていて、
Aさんが1件目を修正。Bさんは2件目を修正。
 
Aさんがフォームを閉じてデーター更新。
その後Bさんがフォームを閉じると、
Bさんの内容でデーター更新されてしまい、
Aさんの修正が無かったことになってしまいます。
 
(1件目はBさんの内容で更新されるため)
 
どういった工夫をすればいいでしょうか?
 
ワークテーブルを使わないで、
直接リンクテーブルをレコードソースとすることも考えたのですが、
レコード件数が多く、動作が遅くなってしまうため、
出来ればワークテーブルを使いたいです。
 
 

回答
投稿日時: 24/11/19 11:54:47
投稿者: sk

引用:
クライアントサーバーについて教えてください。

主旨としては「データの競合発生時の対処方法について」
といったところでしょうか。
 
引用:
バックエンドはSQL Server Expressで、フロントエンドはAccess2019です。
SQL ServerのテーブルをAccess側でリンクテーブルとしてします。

SQL Server データベース側の各テーブルの定義内容
(各フィールドの名前/データ型、および主キーを含む
インデックス定義)について明記されることをお奨めします。
 
引用:
Accessのフォームで日付を指定すると、
その日のイベントに参加する人のデーターをワークテーブルにコピーして、
表形式のサブフォームで修正します。

仮に[イベントテーブル]とそれに従属する[イベント参加者テーブル]があるとして、
[イベントテーブル]の主キー(および[イベント参加者テーブル]の外部キー)は
どのフィールドなのでしょうか。
 
引用:
現在、それで問題なく動いているのですが、
同じ日付のイベントを同時に開く可能性が出てきました。

そもそも、複数の異なるイベントが同じ日付に開催される可能性は
ないのでしょうか。
 
引用:
例えば、AさんもBさんも11/30のイベントを開いていて、
Aさんが1件目を修正。Bさんは2件目を修正。

(日付のことはともかくとして)上記を「[イベントテーブル]の同じレコード」
という表現に置き換えた場合、その時編集対象となる[イベントテーブル]
および[イベント参加者テーブル]のレコードに対し、適当なタイミングで
レコードロックをかけ、それらのレコードの保存が完了するか、もしくは
編集がキャンセルされるまで、他のユーザーが同じレコードを
編集することが出来ないようにするのが一般的でしょう。
 
引用:
ワークテーブルを使わないで、
直接リンクテーブルをレコードソースとすることも考えたのですが、
レコード件数が多く、動作が遅くなってしまうため、
出来ればワークテーブルを使いたいです。

ワークテーブルを使うにしろ使わないにしろ、
バックエンドが SQL Server データベースなのであれば、
レコードロックをかける対象は SQL Server データベース上の
[イベントテーブル]および[イベント参加者テーブル]の
レコードでなければなりません。

トピックに返信