Совместная работа обработчиков событий

Если вы не программируются в Visual Basic, все обработчики событий для Подключение изаписей должны быть реализованы независимо от того, обрабатываете ли вы все события. Объем работы реализации, которую необходимо выполнить, зависит от языка программирования. Дополнительные сведения см. в разделе экземпляра событий ADO по языку.

Парные обработчики событий

Каждый обработчик событий Will имеет связанный обработчик событий Complete . Например, когда приложение изменяет значение поля, вызывается обработчик событий WillChangeField . Если изменение приемлемо, приложение оставляет параметр adStatus неизменным и выполняется операция. По завершении операции событие FieldChangeComplete уведомляет приложение о завершении операции. Если оно выполнено успешно, adStatus содержит adStatusOK; в противном случае adStatus содержит adStatusErrorsOccurred и необходимо проверка объект Error, чтобы определить причину ошибки.

При вызове WillChangeField можно определить, что изменение не должно быть сделано. В этом случае задайте для adStatusCancel значение adStatusCancel. Операция отменена, и событие FieldChangeComplete получает значение adStatus adStatusErrorsOccurred. Объект Error содержит adErrOperationCancelled, чтобы обработчик FieldChangeComplete знал, что операция отменена. Однако перед изменением параметра adStatus необходимо проверка значение параметра adStatus, так как параметр adStatus to adStatusCancel не действует, если параметру присвоено значение adStatusCantDeny при входе в процедуру.

Иногда операция может вызывать несколько событий. Например, объект Recordset имеет связанные события для изменений полей и изменений записи . Когда приложение изменяет значение поля, вызывается обработчик событий WillChangeField . Если она определяет, что операция может продолжаться, обработчик событий WillChangeRecord также вызывается. Если этот обработчик также позволяет продолжить событие, то изменения выполняются и вызываются обработчики событий FieldChangeComplete и RecordChangeComplete . Порядок вызова обработчиков событий Will для определенной операции не определен, поэтому следует избегать написания кода, который зависит от вызовов обработчиков в определенной последовательности.

В случаях, когда возникает несколько событий Уилл, одно из событий может отменить ожидающие операции. Например, когда приложение изменяет значение поля, обработчики событий WillChangeField и WillChangeRecord обычно вызываются. Однако если операция отменена в первом обработчике событий, его связанный обработчик Complete немедленно вызывается с adStatusOperationCancelled. Второй обработчик никогда не вызывается. Однако если первый обработчик событий позволяет продолжить событие, вызывается другой обработчик событий. Если операция отменяется, оба события Complete будут вызываться, как в предыдущих примерах.

Неоплачиваемые обработчики событий

Если состояние, переданное событию, не является adStatusCantDeny, вы можете отключить уведомления о событиях для любого события, возвращая adStatusUnwantedEvent в параметре Status . Например, при первом вызове обработчика событий Complete можно вернуть adStatusUnwantedEvent. Впоследствии вы получите только события Will . Однако некоторые события могут быть активированы по нескольким причинам. В этом случае событие будет иметь параметр Reason . При возврате adStatusUnwantedEvent вы перестанете получать уведомления об этом событии, только если они происходят по этой конкретной причине. Другими словами, вы потенциально получите уведомление по каждой возможной причине, что событие может быть активировано.

Обработчики событий Single Will могут быть полезны, если вы хотите проверить параметры, которые будут использоваться в операции. Эти параметры операции можно изменить или отменить операцию.

Кроме того, оставьте уведомление о событии завершенным . При вызове первого обработчика событий Will возвращает adStatusUnwantedEvent. Впоследствии вы получите только события Завершения .

Обработчики событий Single Complete могут быть полезны для управления асинхронными операциями. Каждая асинхронная операция имеет соответствующее событие Complete .

Например, для заполнения большого объекта Recordset может потребоваться много времени. Если приложение написано соответствующим образом, можно запустить операцию и продолжить другую Recordset.Open(...,adAsyncExecute) обработку. В конечном итоге вы получите уведомление о заполнении набора записей событием ExecuteComplete .

Отдельные обработчики событий и несколько объектов

Гибкость языка программирования, например Visual C++, позволяет иметь один обработчик событий обработки событий из нескольких объектов. Например, можно использовать один обработчик событий отключения из нескольких объектов Подключение ion. Если одно из подключений закончилось, вызывается обработчик событий Отключения . Можно указать, какое соединение вызвало событие, так как для параметра объекта обработчика событий задан соответствующий объект Подключение ion.

Примечание.

Этот метод нельзя использовать в Visual Basic, так как этот язык может сопоставлять только один объект с обработчиком событий.

См. также

Общие сведения об обработчике событий ADO
Создание экземпляра события ADO на различных языках
Параметры события
Типы событий