Взаимодействие обработчиков событий
Область применения: Access 2013, Office 2013
Если вы не программируются в Visual Basic, необходимо реализовать все обработчики событий Connection и Recordset независимо от того, обрабатываются ли все события на самом деле. Объем работы по реализации зависит от языка программирования. Дополнительные сведения см. в разделе Создание экземпляров событий ADO по языку.
Связанные обработчики событий
Каждый обработчик событий Will имеет связанный обработчик событий Complete. Например, когда приложение изменяет значение поля, вызывается обработчик событий WillChangeField . Если изменение приемлемо, приложение оставляет параметр adStatus без изменений и выполняется операция. После завершения операции событие FieldChangeComplete уведомляет приложение о завершении операции. В случае успешного завершения adStatus содержит adStatusOK; В противном случае adStatus содержит adStatusErrorsOccurred, и необходимо проверка объект Error, чтобы определить причину ошибки.
При вызове WillChangeField можно определить, что изменения вносить не следует. В этом случае задайте для adStatus значение adStatusCancel. Операция отменяется, а событие FieldChangeComplete получает значение adStatusadStatusErrorsOccurred. Объект Error содержит adErrOperationCancelled , чтобы обработчик FieldChangeComplete знал, что операция была отменена. Однако перед его изменением необходимо проверка значение параметра adStatus, так как установка adStatus в значение adStatusCancel не будет действовать, если параметру было присвоено значение adStatusCantDeny при входе в процедуру.
Иногда операция может вызвать несколько событий. Например, объект Recordset содержит парные события для изменений полей и изменений записи . Когда приложение изменяет значение Field, вызывается обработчик событий WillChangeField . Если определяет, что операция может продолжаться, также создается обработчик событий WillChangeRecord . Если этот обработчик также позволяет продолжить событие, вносится изменение и вызываются обработчики событий FieldChangeComplete и RecordChangeComplete . Порядок вызова обработчиков событий Will для конкретной операции не определен, поэтому следует избегать написания кода, который зависит от вызова обработчиков в определенной последовательности.
В случаях, когда возникает несколько событий Will, одно из них может отменить ожидающие операции. Например, когда приложение изменяет значение Field, обычно вызываются обработчики событий WillChangeField и WillChangeRecord . Однако если операция отменена в первом обработчике событий, связанный с ней обработчик Complete немедленно вызывается с помощью adStatusOperationCancelled. Второй обработчик никогда не вызывается. Однако если первый обработчик событий позволяет продолжить событие, будет вызван другой обработчик событий. Если операция будет отменена, будут вызываться оба события Complete, как в предыдущих примерах.
Обработчики неспаренных событий
Если состояние, переданное событию, не является adStatusCantDeny, вы можете отключить уведомления о событиях для любого события, возвращая adStatusUnwantedEvent в параметре Status . Например, при первом вызове обработчика событий Complete можно вернуть adStatusUnwantedEvent. Впоследствии вы получите только события Will. Однако некоторые события могут быть активированы по нескольким причинам. В этом случае событие будет иметь параметр Reason . При возврате adStatusUnwantedEvent вы перестанете получать уведомления об этом событии только в том случае, если они происходят по этой конкретной причине. Другими словами, вы будете получать уведомления о каждой возможной причине, по которой событие может быть активировано.
Обработчики событий Single Will могут быть полезны, если требуется проверить параметры, которые будут использоваться в операции. Вы можете изменить эти параметры операции или отменить операцию.
Кроме того, не включайте уведомление о событиях complete. При вызове первого обработчика событий Will возвращается adStatusUnwantedEvent. В дальнейшем вы получите только события Complete.
Обработчики событий Single Complete могут быть полезны для управления асинхронными операциями. Каждая асинхронная операция имеет соответствующее событие Complete.
Например, заполнение большого объекта Recordset может занять много времени. Если приложение написано надлежащим образом, можно запустить операцию и продолжить другую обработку. В конечном итоге вы получите уведомление о заполнении набора записей событием ExecuteComplete .
Отдельные обработчики событий и несколько объектов
Гибкость языка программирования, например Microsoft Visual C++, позволяет одному обработчику событий обрабатывать события из нескольких объектов. Например, один обработчик событий Disconnect может обрабатывать события из нескольких объектов Connection . Если одно из подключений закончилось, будет вызван обработчик событий Disconnect . Вы можете определить, какое соединение вызвало событие, так как для параметра объекта обработчика событий будет задан соответствующий объект Connection .
Примечание.
Этот метод нельзя использовать в Visual Basic, так как этот язык может сопоставлять только один объект с обработчиком событий.