Control de eventos de ADO

El modelo de eventos de ADO admite determinadas operaciones de ADO sincrónicas y asincrónicas que emiten eventos, o notificaciones, antes de que se inicie o después de que se complete la operación. Un evento es realmente una llamada a una rutina de controlador de eventos que se define en la aplicación.

Si proporciona funciones o procedimientos de controlador para el grupo de eventos que se producen antes de que se inicie la operación, puede examinar o modificar los parámetros que se pasaron a la operación. Dado que aún no se ha ejecutado, puede cancelar la operación o permitir que se complete.

Los eventos que se producen después de que se complete una operación son especialmente importantes si se usa ADO de forma asincrónica. Por ejemplo, una aplicación que inicia una operación Recordset.Open asincrónica recibe una notificación por un evento de ejecución completa cuando finaliza la operación.

El uso del modelo de eventos de ADO agrega cierta sobrecarga a la aplicación, pero proporciona mucha más flexibilidad que otros métodos de tratar con operaciones asincrónicas, como supervisar la propiedad State de un objeto con un bucle.

Nota

Para controlar los eventos, ADO debe tener una bomba de mensajes o usarse en un modelo de apartamento de un solo subproceso (STA). Los eventos de ADO se controlan internamente mediante la creación de una ventana oculta. ADO publica mensajes en esta ventana cuando es necesario desencadenar eventos. Esto se hace para asegurarse de que los eventos se envían al subproceso llamado IConnectionPoint::Advise en el punto de conexión. Esta arquitectura puede causar problemas cuando el subproceso que debe recibir las notificaciones no bombea mensajes de ventana. Entre los posibles problemas se incluyen los eventos de ADO que no se entregan al subproceso y la ventana global se agota el tiempo de espera y, posiblemente, se ralentiza todo el sistema porque las ventanas ocultas no procesan los mensajes. Normalmente, los subprocesos STA tienen una bomba de mensajes en ejecución, por lo que este problema no se manifiesta en subprocesos STA. Sin embargo, los subprocesos MTA no suelen tener una bomba de mensajes, por lo que el problema se manifiesta normalmente en subprocesos MTA.

Esta sección contiene los temas siguientes.

Consulte también

Conexión ADO y los eventos de conjunto de registros
Creación de instancias de eventos de ADO según el lenguaje
Eventos de ADO
Parámetros de eventos
Tipos de eventos