Partilhar via


Manipulando eventos do ADO

O modelo de evento ADO dá suporte a determinadas operações síncronas e assíncronas do ADO que emitem eventos, ou notificações, antes de a operação começar ou depois de ela ser concluída. 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 para o grupo de eventos que ocorrem antes do início da operação, você poderá examinar ou modificar os parâmetros que foram passados para a 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ê usar 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 adiciona 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.

Nota

Para lidar com eventos, o ADO precisa ter uma bomba de mensagem ou ser usado em um modelo STA (apartamento de thread único). Os eventos do ADO são tratados internamente criando 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 que chamou 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 ao thread e as transmissões de janela global estão atingindo o tempo limite e possivelmente atrasando 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 de MTA, no entanto, normalmente não têm uma bomba de mensagem, portanto, o problema normalmente se manifestará em threads do MTA.

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

Consulte Também

resumo do manipulador de eventos do ADO
Instanciação de Evento do ADO por Linguagem
Eventos do ADO
parâmetros de evento
tipos de eventos