2012-05-17 28 views
9

データベース内の特定のテーブルの内容がいつ変更されたかを知ることは可能ですか? SQL Serverは、データが別のユーザーによって変更されたことをクライアントアプリケーションにどのように通知できますか? dbGoでクエリ通知を実装する方法クライアント - サーバーデータベースアプリケーション:データが変更されたことをクライアントに通知する方法

クライアントはデータベースをポーリングする必要がありますか、それともこのためのコールバックメカニズムがありますか?

私のクライアントはTADODataSetのDelphiアプリケーションで、私のサーバーはSQL Server 2005/2008で、複数のクライアントにサービスを提供しています。

+1

可能な重複http://tackoverflow.com/q/9671284/960757 – TLama

+1

@traodata、TADODataSetおよびSQL-Serverの決定的な解決策はまだありません。 – ZigiZ

+1

['this answer'](http://stackoverflow.com/a/9671708/960757)が正しければ、* dbGo(ADO)は通知をサポートしません* ... – TLama

答えて

1

いいえ、あなたはこれを行うには、独自の "中間層" を構築しなければなりません。最も簡単な方法は、サーバーをポーリングすることです。より複雑なソリューションは、データベースをポーリングして通知をクライアントにプッシュする独自の「中間層」サーバーを構築することです(独自のクライアント接続を使用して)。

中間的な解決策は、サーバー上の別のクライアントに「監視」し、クライアントがポーリングできる別のデータベーステーブルに「通知フラグ」を書き込む必要があるテーブルをポーリングすることです。少なくともこのようにして、クライアントは、変更されたものをリストした最小限のデータで単純なテーブルをポーリングし、別の選択クエリで読み取ることができます。クライアント側の労力を大幅に削減。

+0

また、「ミドル・ミドル・グラウンド」の方法もあります。レコードを変更するデータベース・クライアント・アプリケーション自体(アプリケーション・サーバー側のロジックを含む)は、ブロードキャストのレコードを変更することができます。中間層を介してすべてのリスニングクライアントにメッセージを送信します。これは、他のアプリに変更を通知するための「即時の」方法になります。さらに、サーバー上の別のクライアントは、ポーリングの量を減らすために、より長い間隔で実行され、クライアントが生成した通知メッセージを受信するたびにポーリングサイクルをスキップできます。 – mjn

関連する問題