이벤트 처리기가 함께 작동하는 방법
Visual Basic에서 프로그래밍하지 않는 한 Connection 및 Recordset 이벤트에 대한 모든 이벤트 처리기는 실제로 모든 이벤트를 처리하는지 여부에 관계없이 구현되어야 합니다. 수행해야 하는 구현 작업의 양은 프로그래밍 언어에 따라 달라집니다. 자세한 내용은 언어별 ADO 이벤트 인스턴스화을 참조하세요.
쌍을 이루는 이벤트 처리기
각 Will 이벤트 처리기에는 연결된 Complete 이벤트 처리기가 있습니다. 예를 들어 애플리케이션이 필드 값을 변경하면 WillChangeField 이벤트 처리기가 호출됩니다. 변경이 허용되는 경우 애플리케이션은 adStatus 매개 변수를 변경하지 않고 작업을 수행합니다. 작업이 완료되면 FieldChangeComplete 이벤트가 애플리케이션에 작업이 완료되었음을 알려줍니다. 성공적으로 완료되면 adStatus는 adStatusOK을 포함합니다. 그렇지 않으면, adStatus는 adStatusErrorsOccurred을 포함하며, 오류의 원인을 파악하려면 Error 개체를 확인해야 합니다.
WillChangeField 호출되면 변경하지 않아야 한다고 결정할 수 있습니다. 이 경우 adStatus adStatusCancel을 설정합니다. 작업이 취소되고 FieldChangeComplete 이벤트는 adStatusErrorsOccurredadStatus 값을 받습니다. Error 개체는 adErrOperationCancelled를 포함하여, 그렇게 해서 작업이 취소되었음을 FieldChangeComplete 처리기가 알 수 있습니다. 그러나 adStatus 매개 변수의 값을 변경하기 전에 확인해야 합니다. 왜냐하면 프로시저에 진입할 때 매개 변수가 adStatusCantDeny으로 설정되었다면 adStatusCancel로 adStatus을(를) 설정해도 효과가 없기 때문입니다.
어떤 경우에는 작업이 둘 이상의 이벤트를 발생시킬 수 있습니다. 예를 들어 Recordset 개체에는 필드 변경 내용 및 레코드 변경에 대한 이벤트가 쌍으로 연결됩니다. 애플리케이션이 필드값을 변경하면 WillChangeField 이벤트 처리기가 호출됩니다. 작업을 계속할 수 있다고 판단되면 WillChangeRecord 이벤트 처리기도 발생합니다. 이 처리기에서 이벤트를 계속하도록 허용하는 경우 변경이 수행되고 FieldChangeComplete 및 RecordChangeComplete 이벤트 처리기가 호출됩니다. 특정 작업에 대한 Will 이벤트 처리기가 호출되는 순서는 정의되지 않으므로 특정 시퀀스에서 처리기를 호출하는 데 의존하는 코드를 작성하지 않아야 합니다.
여러 개의 Will 이벤트가 발생할 경우, 그중 하나의 이벤트가 진행 중인 작업을 취소할 수 있습니다. 예를 들어 애플리케이션이 필드값을 변경하는 경우 WillChangeField 및 WillChangeRecord 이벤트 처리기가 일반적으로 호출됩니다. 그러나 첫 번째 이벤트 처리기에서 작업이 취소된 경우 연결된 Complete 처리기는 adStatusOperationCancelled사용하여 즉시 호출됩니다. 두 번째 처리기는 호출되지 않습니다. 그러나 첫 번째 이벤트 처리기가 이벤트를 진행하도록 허용하는 경우 다른 이벤트 처리기가 호출됩니다. 그런 다음 작업을 취소하면 이전 예제와 같이 Complete 이벤트가 모두 호출됩니다.
2진수 이벤트 처리기
이벤트에 전달된 상태가 adStatusCantDeny가 아닌 경우, Status 매개 변수에서 adStatusUnwantedEvent를 반환하여 해당 이벤트의 알림을 끌 수 있습니다. 예를 들어 Complete 이벤트 처리기가 처음 호출될 때, adStatusUnwantedEvent를 반환할 수 있습니다. 이후에는 Will 이벤트만 받게 됩니다. 그러나 여러 가지 이유로 일부 이벤트를 트리거할 수 있습니다. 이 경우 이벤트에는 Reason 매개 변수가 있습니다. adStatusUnwantedEvent을 반환하는 경우, 해당 특정 이유로 발생하는 동안에만 그 이벤트에 대한 알림 수신이 중지됩니다. 즉, 이벤트가 트리거될 수 있는 각 가능한 이유에 대한 알림을 받을 수 있습니다.
단일 Will 이벤트 처리기는 작업에 사용될 매개 변수를 검사하려는 경우에 유용할 수 있습니다. 이러한 작업 매개 변수를 수정하거나 작업을 취소할 수 있습니다.
또는 완료 이벤트 알림을 사용 상태로 유지합니다. 첫 번째 Will 이벤트 처리기가 호출되면 adStatusUnwantedEvent반환합니다. 이후에 완료 이벤트만 받게 됩니다.
단일 Complete 이벤트 처리기는 비동기 작업을 관리하는 데 유용할 수 있습니다. 각 비동기 작업에는 적절한 Complete 이벤트가 있습니다.
예를 들어 큰 Recordset 개체를 채우는 데 시간이 오래 걸릴 수 있습니다. 애플리케이션이 적절하게 작성된 경우 Recordset.Open(...,adAsyncExecute)
작업을 시작하고 다른 처리를 계속할 수 있습니다.
Recordset가 ExecuteComplete 이벤트에 의해 채워지면 결국 알림을 받게 될 것입니다.
단일 이벤트 처리기 및 여러 개체
Visual C++와 같은 프로그래밍 언어의 유연성을 통해 여러 개체의 이벤트 처리기 프로세스 이벤트를 하나 가질 수 있습니다. 예를 들어, 하나의 Disconnect 이벤트 처리기가 여러 Connection 개체에서 발생하는 이벤트를 처리할 수 있습니다. 연결 중 하나가 종료되면 Disconnect 이벤트 처리기가 호출됩니다. 이벤트 처리기 개체 매개 변수가 해당 Connection 개체로 설정되므로 이벤트를 발생시킨 연결을 알 수 있습니다.
메모
이 기술은 Visual Basic에서 사용할 수 없습니다. 해당 언어는 하나의 개체와 이벤트 처리기의 상관 관계를 지정할 수 있기 때문입니다.