2

免責事項: Microsoft Access データベースを使用する必要があり、アプリをサーバーに接続してサービスを購読することができません。

VB.net を使用して WPF アプリケーションを作成しています。アプリケーションが読み込まれ、データセットが入力されたときに一度クエリを実行する、アクセス データベースのレコードに基づいてリストビューを作成しています。次に、LINQ to dataset を使用して、フィルターなどに応じてユーザーにデータを表示します。

ただし、アクセス テーブルは 1 日に何度も変更されます。つまり、ユーザーがアプリケーションをリロードしないと、1 日が進むにつれて「古いデータ」がユーザーに表示されます。データベースでレコードが追加、削除、または変更されたときにイベントを発生させることができるように、Access データベースを VB.net アプリケーションに接続する方法はありますか? イベント ハンドラーで必要なコードは問題ありません。アクセス テーブルから vb.net アプリケーション イベントをトリガーする方法を見つけ出す必要があります。

私がやろうとしているのは、データベース テーブルへのリアルタイム編集を表示することですが、アプリケーション内であると考えてください。どんな助けも大歓迎です。明確化が必要な場合はお知らせください。一般的な方向性が必要なだけで、満足しています。もっと研究する。

私のソリューションのアイデア:

  • ミリ秒アクセス変更の監査テーブルを作成する
  • ユーザー アプリケーション内に個別のワーカー スレッドを作成して、60 秒ごとに変更について監査テーブルにクエリを実行します。
  • 変更が見つかった場合、影響を受けるデータセット レコードが変更されます
  • データセット レコードの更新時にイベントを発生させて、影響を受けるオブジェクト/プロパティを更新します
4

2 に答える 2

1

あなたがやりたいことをするためのいくつかの方法が、あなたは基本的にあなたのプロセスに正しいです。

私の知る限り、データベースドライバーからイベントを取得して、何かが変更されたことを通知する直接的な方法はないため、ポーリングが唯一の解決策です。

  • MSAccessデータベースはAccess2010ACCDBデータベースであり、そのためにACEドライバーを使用しています(アプリが実行されているマシンにAccessがインストールされていない場合)。新しいデータマクロトリガーを使用して、テーブルへの変更を記録できます。データベース内で、必要に応じて更新の新しい挿入、削除などを記録する監査テーブルに自動的に移動します。
    これらはACEデータベースドライバレベルで発生するため、このアプローチが最適であり、可能な限り効率的で透過的です。

  • 古いバージョンのAccessを使用している場合は、自分で監査を実装する必要があります。アレンブラウンはそれについての良い記事を持っています。少し検索すると、他の解決策も得られます。

  • 監視する必要のあるテーブルに対してクエリを実行することもできます

いずれの場合も、前述のように監査またはデータテーブルを監視する必要があります。
データベースの負荷やクライアントの数などに応じて、60秒よりも頻繁に変更を監視でき、数秒ごとに簡単に確認できます。

ただし、次のことをお勧めします。

  • アプリの実行中はデータベースへの永続的な接続を維持します。読み取り用にダミーテーブルを開き、アプリをシャットダウンするまで閉じないでください。これには誰にとってもパフォーマンスコストはかかりませんが、実行するすべてのクエリに対してではなく、高価なロックファイルの作成が1回だけ行われることが保証されます。これは、パフォーマンスを大幅に向上させる可能性があります。理由の詳細については、この記事を参照してください。

  • 監査テーブル(またはデータテーブル)を簡単に監視できるようにします。レコードが作成され、最後に変更された日時を記録するタイムスタンプ列を含めます。これにより、変更のチェックが非常に迅速かつ効率的になります。最新のレコード変更日が最後に読んだ日付と一致するかどうかをチェックする必要があります。
    Access 2010を使用すると、それを行うためのトリガーを簡単に追加できます。古いバージョンでは、フォームのレベルでそれを行う必要があります。

于 2012-05-21T02:02:33.583 に答える
0

SQL Server を使用している場合

SQL 2005 まではNotification Servicesを使用できました

SQL Server 2008 R2 以降、StreamInsightに置き換えられました。

その他のデータベース管理システムと代替手段

オラクル

中間層で変更を処理し、クライアントに通知する

または世論調査。これには、あまりにも長い変更を見逃さないように間隔を構成する必要があります。

一般に

サーバーがクライアントにメッセージを送信できるようにする必要がある場合、クライアントに対してチャネル/ソケットを開いたままにしておく必要があります。これは、クライアントが多数ある場合に非常に高価になる可能性があります。サーバーのプッシュに反対し、インテリジェントなポーリングを試みることをお勧めします。インテリジェントなポーリングとは、同じデータに対してデータベースに何度もヒットすることを防ぐために、サーバー上で可能な限り大きな間隔と適切なキャッシュを意味します。

于 2012-05-20T19:52:03.543 に答える