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