Manipular eventos ADO

O modelo de evento do ADO dá suporte a determinadas operações síncronas e assíncronas do ADO que emitem eventos ou notificações antes do início ou após a conclusão da operação. Um evento é, na verdade, uma chamada para uma rotina de manipulador de eventos que você define em seu aplicativo.

Se você fornecer funções ou procedimentos de manipulador ao grupo de eventos que ocorrem antes do início da operação, poderá examinar ou modificar os parâmetros que foram transmitidos à operação. Como ela ainda não foi executada, você pode cancelar a operação ou permitir que ela seja concluída.

Os eventos que ocorrem após a conclusão de uma operação são especialmente importantes se você usa o ADO de forma assíncrona. Por exemplo, um aplicativo que inicia uma operação assíncrona Recordset.Open é notificado por um evento de execução completa quando a operação é concluída.

O uso do modelo de evento ADO gera alguma sobrecarga ao seu aplicativo, mas fornece muito mais flexibilidade do que outros métodos de lidar com operações assíncronas, como monitorar a propriedade State de um objeto com um loop.

Observação

Para lidar com eventos, o ADO precisa ter uma bomba de mensagens ou ser usado em um modelo STA (apartamento de thread único). Os eventos do ADO são tratados internamente com a criação de uma janela oculta. O ADO posta mensagens nessa janela quando os eventos precisam ser acionados. Isso é feito para garantir que os eventos sejam enviados para o thread chamado IConnectionPoint::Advise no ponto de conexão. Essa arquitetura pode causar problemas quando o thread que deve receber as notificações não bombeia mensagens de janela. Os possíveis problemas incluem eventos do ADO que não estão sendo entregues no thread e as transmissões de janela global atingirem o tempo limite e possivelmente reduzirem a velocidade de todo o sistema porque as janelas ocultas não processam as mensagens. Os threads STA normalmente têm uma bomba de mensagens em execução para que esse problema não se manifeste em threads STA. Os threads MTA, no entanto, normalmente não têm uma bomba de mensagens, ou seja, o problema normalmente se manifestará em threads MTA.

Esta seção contém os seguintes tópicos.

Consulte Também

Resumo do manipulador de eventos ADO
Instanciação de evento ADO por linguagem
Eventos ADO
Parâmetros de evento
Tipos de eventos