DB変更の追跡または通知-挿入と更新のほとんど
-
11-07-2019 - |
質問
DBでレコードが挿入または更新されるたびに追跡または通知を受けるにはどうすればよいですか?このようなDBの変更が発生するたびに、外部アプリケーションに変更をほぼリアルタイムで通知したいと思います。 DBMSに依存せず、アプリケーションプログラミング言語に依存しない方法がありますか?そうでない場合、特にMS AccessとMS SQL Serverで可能ですか?もちろん、データベースの継続的なポーリングを避けたいと考えています。
解決
SQL Serverでは、SQL Server自体にDLLをロードし、拡張ストアドプロシージャでこれからメソッドを呼び出すことができます。 DLLは他のアプリケーションに通知することができます-通常はTCPソケットを介して。
他のヒント
Microsoft SQL Serverの最新バージョンでは、サーバーの状態とイベントに基づいて.NETコードでイベントを発生させることができると思います。私はそれを試していないし、これを行う「DBMSに依存しない」方法を聞いたことがありません(Xミリ秒ごとにDBをポーリングすることはありません)。
MS-Accessでは、レコードが作成または更新されたときにユーザー名と日付を保存するメインテーブルのフィールドを使用して、レコードの変更またはレコードの追加を追跡します。
Windows APIを使用してユーザー名を記録する必要があります。通常は、配電盤フォームが開かれたときに実行されます。
特定の変更を追跡するためのアウェイを探しています。私のデータベースはプロジェクト管理に使用されます。私が今誰といつ変更したかだけでなく、具体的に何が変更されたかを追跡したい。
これは元の質問の要件を満たしていると思います。後で、ユーザーの名前を読み取るWindows APIを追加できます。
Private Sub Form_BeforeInsert(整数としてキャンセル) Me!UserCreated = UCase(CurrentUser()) Me!DateCreated = Now() サブを終了
Private Sub Form_BeforeUpdate(整数としてキャンセル) Me!DateModified = Now() Me!UserModified = UCase(CurrentUser()) サブを終了
-マイク
SQL Serverでこれを行うには、通知サービスを使用します。何らかの方法で処理できるデータ更新のDBからの通知をサブスクライブするdllを記述します。
ただし、MSは、削除していると述べています。これはSQL Server 2008からから。
Oracleには似たようなものがありますが(テクノロジーはそのままにしておく傾向があります)、データベースに中立なものは見ていません。