Como os manipuladores de eventos funcionam juntos
A menos que você esteja programando no Visual Basic, todos os manipuladores de eventos para Connection e Recordset eventos devem ser implementados, independentemente de você realmente processar todos os eventos. A quantidade de trabalho de implementação que você precisa fazer depende da linguagem de programação. Para obter mais informações, consulte Instanciação de Evento do ADO em linguagem.
Manipuladores de eventos emparelhados
Cada manipulador de eventos Will tem um manipulador de eventos Complete associado. Por exemplo, quando seu aplicativo altera o valor de um campo, o manipulador de eventos WillChangeField é chamado. Se a alteração for aceitável, seu aplicativo deixará o parâmetro adStatus inalterado e a operação será executada. Quando a operação for concluída, um evento FieldChangeComplete notificará seu aplicativo de que a operação foi concluída. Se foi concluído com êxito, adStatus contém adStatusOK; caso contrário, adStatus contém adStatusErrorsOccurred e você deve verificar o objeto Error para determinar a causa do erro.
Quando WillChangeField é chamado, você pode decidir que a alteração não deve ser feita. Nesse caso, defina adStatus como adStatusCancel. A operação é cancelada e o evento FieldChangeComplete recebe um valor adStatus de adStatusErrorsOccurred. O objeto Error contém adErrOperationCancelled para que seu manipulador FieldChangeComplete saiba que a operação foi cancelada. No entanto, você precisa verificar o valor do parâmetro adStatus antes de alterá-lo, pois a configuração adStatus para adStatusCancel não terá efeito se o parâmetro foi definido como adStatusCantDeny na entrada do procedimento.
Às vezes, uma operação pode gerar mais de um evento. Por exemplo, o objeto Recordset possui eventos emparelhados para alterações no Campo e alterações no Registro. Quando seu aplicativo altera o valor de um Campo , o manipulador de eventos WillChangeField é chamado. Se determinar que a operação pode continuar, o manipulador de eventos WillChangeRecord também é acionado. Se esse manipulador também permitir que o evento continue, a alteração será feita e os manipuladores de eventos FieldChangeComplete e RecordChangeComplete serão chamados. A ordem na qual os manipuladores de eventos Will para uma determinada operação são chamados não é definida, portanto, você deve evitar escrever código que dependa de chamar manipuladores em uma sequência específica.
Em casos em que vários eventos Will são gerados, um dos eventos pode cancelar a operação pendente. Por exemplo, quando seu aplicativo altera o valor de um Campo , os manipuladores de eventos WillChangeField e WillChangeRecord normalmente seriam chamados. No entanto, se a operação for cancelada no primeiro manipulador de eventos, o manipulador associado Complete é imediatamente invocado com adStatusOperationCancelled. O segundo manipulador nunca é chamado. Se, no entanto, o primeiro manipulador de eventos permitir que o evento prossiga, o outro manipulador de eventos será chamado. Se, em seguida, cancelar a operação, ambos os eventos Concluir serão chamados como nos exemplos anteriores.
Manipuladores de eventos não pareados
Desde que o status passado para o evento não seja adStatusCantDeny, você pode desativar as notificações de evento para qualquer evento retornando adStatusUnwantedEvent no parâmetro Status. Por exemplo, quando o manipulador de eventos Complete for chamado pela primeira vez, você pode retornar adStatusUnwantedEvent . Posteriormente, você receberá apenas eventos do tipo Will. No entanto, alguns eventos podem ser disparados por mais de um motivo. Nesse caso, o evento terá um parâmetro Reason. Quando você retornar adStatusUnwantedEvent, você deixará de receber notificações para esse evento somente quando ocorrerem por esse motivo específico. Em outras palavras, você potencialmente receberá uma notificação por cada possível motivo para que o evento possa ser disparado.
Os manipuladores de eventos Will podem ser úteis quando você quiser examinar os parâmetros que serão usados em uma operação. Você pode modificar esses parâmetros de operação ou cancelar a operação.
Como alternativa, deixe a notificação do evento Concluir habilitada. Quando o primeiro manipulador de eventos Will for chamado, retorne adStatusUnwantedEvent. Posteriormente, você receberá apenas eventos completos.
Manipuladores de eventos únicos de Completo podem ser úteis para gerenciar operações assíncronas. Cada operação assíncrona tem um evento Complete apropriado.
Por exemplo, pode levar muito tempo para preencher um grande objeto Recordset. Se a sua aplicação for escrita corretamente, você poderá iniciar uma operação de Recordset.Open(...,adAsyncExecute)
e continuar com outros processamentos. Eventualmente, você será notificado quando o do conjunto de registros for preenchido por um evento ExecuteComplete.
Manipuladores de eventos individuais e múltiplos objetos
A flexibilidade de uma linguagem de programação como o Visual C++ permite que você tenha um manipulador de eventos processando eventos de múltiplos objetos. Por exemplo, você pode ter um manipulador de eventos Disconnect que processa eventos de vários objetos Connection. Se uma das conexões terminasse, o manipulador de eventos Disconnect seria chamado. Você pode saber qual conexão causou o evento porque o parâmetro de objeto do manipulador de eventos seria definido como o objeto Connection correspondente.
Nota
Essa técnica não pode ser usada no Visual Basic porque essa linguagem pode correlacionar apenas um objeto a um manipulador de eventos.
Consulte Também
resumo do manipulador de eventos do ADO
instanciação de evento do ADO por linguagem
parâmetros de evento
Tipos de eventos