ADO イベントの処理

ADO イベント モデルは、操作の開始前または完了後にイベントまたは通知を発行する特定の同期および非同期 ADO 操作をサポートします。 イベントは、実際には、アプリケーションで定義するイベント ハンドラー ルーチンの呼び出しです。

操作の開始前に発生するイベントのグループに対してハンドラー関数またはプロシージャを指定する場合は、操作に渡されたパラメーターを調べたり変更したりできます。 まだ実行されていないため、操作を取り消すか、完了を許可することができます。

操作の完了後に発生するイベントは、ADO を非同期的に使用する場合に特に重要です。 たとえば、非同期 Recordset.Open 操作を開始するアプリケーションは、操作の終了時に実行完了イベントによって通知を受けます。

ADO イベント モデルを使用すると、アプリケーションに多少のオーバーヘッドが生じますが、ループを使用してオブジェクトの State プロパティを監視するなど、非同期操作を処理する他の方法よりもはるかに柔軟性が高くなります。

注意

イベントを処理するには、ADO にメッセージ ポンプを用意するか、シングル スレッド アパートメント (STA) モデルで使用する必要があります。 ADO イベントは、非表示ウィンドウを作成することによって内部的に処理されます。 ADO では、イベントを発生させる必要がある場合に、このウィンドウにメッセージが投稿されます。 これは、接続ポイントで IConnectionPoint::Advise を呼び出したスレッドにイベントが確実に送信されるようにするために行われます。 このアーキテクチャでは、通知を受信する必要があるスレッドがウィンドウ メッセージをポンプしない場合に問題が発生する可能性があります。 潜在的な問題には、スレッドに配信されない ADO イベントやグローバル ウィンドウ ブロードキャストがタイムアウトし、非表示のウィンドウではメッセージが処理されないため、システム全体の速度が低下する可能性があります。 通常、STA スレッドではメッセージ ポンプが実行されているため、この問題は STA スレッドに現われません。 ただし、MTA スレッドには通常メッセージ ポンプがないため、通常は MTA スレッドで問題が発生します。

このセクションでは、次のトピックを扱います。

参照

ADO イベント ハンドラーの概要
言語別の ADO イベントのインスタンス化
ADO のイベント
イベント パラメーター
イベントの種類