複数クライアントでのデータ更新を取得するには

解決


  2004-02-19 00:54:26  No: 7210

こんにちは、少し質問です。
現在sqlserverを使用して複数クライアントの
予約システムを構築しています。
予約状況をデータベースグリッドに表示し、
他クライアントによる更新を常に表示しようと考えていますが、
複数のクライアントから煩雑に更新が発生する場合、
その更新状況はどのように取得すればよいのでしょうか。

現在その方法がわからなかったので、タイマーを使用して、
一定間隔でクエリーを再オープンしています。

この時、データベースグリッドがちらつき見苦しいのですが、
なにかちらつきを抑えるよい方法があればお教え下さい。
ダブルバッファは試してみましたが、
あまり効果はありませんでした......

以上よろしくお願いします。


にしの  2004-02-19 18:07:15  No: 7211

テーブルの構造にも依りますが、画面に表示しないで、裏側でSQLを実行し、最新のデータの更新日付が変わっていればグリッドをrequeryしてやればよろしいかと思います。


  2004-02-19 18:45:16  No: 7212

早速のご返事ありがとうございます。
膨大な量のデータがある場合、テーブルの全てのデータの更新日付をチェックするのは時間がかかると思われます。
この場合、更新日付時間テーブルのようなものを作成し、全てのテーブルの最新更新日付時間テーブルを作成し、対象テーブルの更新日付時間をチェックして、更新が発生すればrequeryという考え方でよろしいでしょうか。
よろしくお願いします。


えび  2004-02-19 19:08:11  No: 7213

グリッドのちらつきの解決だけなら

with Query do
begin
  DisableControls;
  Close;
  Open;
  EnableControls;
end;


にしの  2004-02-19 19:10:13  No: 7214

そうですね。
Update処理後のトリガーで、更新日付テーブルを更新させればよろしいかと。
# SQLServerに詳しくないので、あるかどうかはわかりません


  2004-02-19 19:25:21  No: 7215

試してみたところ、ちらつきは全くなくなりました。
にしのさん、えびさんには大変ありがとうございました。

ところで、もう少し質問なのですが、
テーブルの更新情報の取得としては、更新日付時間のMAXを取得して、更新をチェックする方法が妥当なのでしょうか、もしくはチェック用のテーブルを作成するべきなのでしょうか。
sqlserverなどで、テーブルの最新更新日付の取得などを行う簡単な方法はないのでしょうか。

よろしくお願いします。


  2004-02-19 19:27:04  No: 7216

書き込みが前後してしまいました。
テーブル更新の方向でトリガーなどをもう少し調べてみます。
大変ありがとうございました。


HOta  2004-02-20 02:46:50  No: 7217

レコード毎に更新日時を記録して、更新時に
取り込んでいるレコードと比較したら道でしょう。
比較中は、レコードロックしておけばいいように思えます。


  2004-02-20 18:30:17  No: 7218

1レコードの更新ならば、更新レコード取得時にロックをかけるので、
問題ないのですが、グリッドにテーブルのレコードを全て表示していると、
全く関係ないレコードを他クライアントで更新したときに、その情報を
どのような方法で一覧表示に反映すればよいのかというところで考えています。
テーブルのレコード毎の更新日時のMAXを取得してテーブル更新を
監視しようとも考えましたが、削除時に問題が発生しそうなので、
にしのさんの書込にあるように、現在は更新日時テーブルを作成して
テーブルの更新を監視しています。
他に良い方法があればぜひお教えください。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加