다음을 통해 공유


이벤트 처리기가 함께 작동하는 방법

Visual Basic에서 프로그래밍하지 않는 한 실제로 모든 이벤트를 처리하는지 여부에 관계없이 ConnectionRecordset 이벤트에 대한 모든 이벤트 처리기를 구현해야 합니다. 수행해야 하는 구현 작업의 양은 프로그래밍 언어에 따라 달라집니다. 자세한 내용은 언어별 ADO 이벤트 인스턴스화를 참조하세요.

쌍을 이루는 이벤트 처리기

각 Will 이벤트 처리기에는 연결된 Complete 이벤트 처리기가 있습니다. 예를 들어 애플리케이션에서 필드 값을 변경하면 WillChangeField 이벤트 처리기가 호출됩니다. 변경이 허용되는 경우 애플리케이션은 adStatus 매개 변수를 변경하지 않고 작업을 수행합니다. 작업이 완료되면 FieldChangeComplete 이벤트가 애플리케이션에 작업이 완료되었음을 알 수 있습니다. 성공적으로 완료되면 adStatusadStatusOK가 포함됩니다. 그렇지 않으면 adStatusadStatusErrorsOccurred가 포함되며 Error 개체를 확인하여 오류의 원인을 확인해야 합니다.

WillChangeField가 호출되면 변경하지 않아야 한다고 결정할 수 있습니다. 이 경우 adStatusadStatusCancel로 설정합니다. 작업이 취소되고 FieldChangeComplete 이벤트는 adStatusErrorsOccurredadStatus 값을 받습니다. Error 개체는 FieldChangeComplete 처리기가 작업이 취소되었음을 알 수 있도록 adErrOperationCancelled를 포함합니다. 그러나 adStatusadStatusCancel로 설정해도 프로시저 항목에서 매개 변수가 adStatusCantDeny로 설정된 경우에는 효과가 없기 때문에 adStatus 매개 변수 값을 변경하기 전에 확인해야 합니다.

경우에 따라 작업이 둘 이상의 이벤트를 발생시킬 수 있습니다. 예를 들어 Recordset 개체에는 Field 변경 및 Record 변경에 대한 쌍을 이루는 이벤트가 있습니다. 애플리케이션에서 Field 값을 변경하면 WillChangeField 이벤트 처리기가 호출됩니다. 작업을 계속할 수 있다고 판단되면 WillChangeRecord 이벤트 처리기도 발생합니다. 이 처리기에서도 이벤트를 계속하도록 허용하면 변경이 수행되고 FieldChangeCompleteRecordChangeComplete 이벤트 처리기가 호출됩니다. 특정 작업에 대한 Will 이벤트 처리기가 호출되는 순서는 정의되지 않으므로 특정 시퀀스의 호출 처리기에 종속된 코드를 작성하지 않아야 합니다.

여러 Will 이벤트가 발생하는 경우 이벤트 중 하나가 보류 중인 작업을 취소할 수 있습니다. 예를 들어 애플리케이션에서 Field 값을 변경하면 WillChangeFieldWillChangeRecord 이벤트 처리기가 모두 정상적으로 호출됩니다. 그러나 첫 번째 이벤트 처리기에서 작업이 취소되면 연결된 Complete 처리기가 adStatusOperationCancelled로 즉시 호출됩니다. 두 번째 처리기는 호출되지 않습니다. 그러나 첫 번째 이벤트 처리기에서 이벤트를 계속 진행할 수 있는 경우 다른 이벤트 처리기가 호출됩니다. 그런 다음, 작업을 취소하면 이전 예제와 같이 Complete 이벤트가 모두 호출됩니다.

쌍을 이루지 않는 이벤트 처리기

이벤트에 전달된 상태가 adStatusCantDeny가 아닌 한 Status 매개 변수에서 adStatusUnwantedEvent를 반환하여 이벤트에 대한 이벤트 알림을 해제할 수 있습니다. 예를 들어 Complete 이벤트 처리기가 처음 호출되면 adStatusUnwantedEvent를 반환할 수 있습니다. 이후에 Will 이벤트만 받게 됩니다. 그러나 여러 가지 이유로 일부 이벤트를 트리거할 수 있습니다. 이 경우 이벤트에는 Reason 매개 변수가 있습니다. adStatusUnwantedEvent를 반환하는 경우 해당 특정 이유로 발생하는 경우에만 해당 이벤트에 대한 알림 수신을 중지합니다. 즉, 이벤트가 트리거될 수 있는 각 가능한 이유에 대한 알림을 받을 수 있습니다.

단일 Will 이벤트 처리기는 작업에 사용될 매개 변수를 검사하려는 경우에 유용할 수 있습니다. 이러한 작업 매개 변수를 수정하거나 작업을 취소할 수 있습니다.

또는 Complete 이벤트 알림을 사용하도록 설정한 상태로 둡니다. 첫 번째 Will 이벤트 처리기가 호출되면 adStatusUnwantedEvent를 반환합니다. 이후에는 Complete 이벤트만 받게 됩니다.

단일 Complete 이벤트 처리기는 비동기 작업을 관리하는 데 유용할 수 있습니다. 각 비동기 작업에는 적절한 Complete 이벤트가 있습니다.

예를 들어 큰 Recordset 개체를 채우는 데 시간이 오래 걸릴 수 있습니다. 애플리케이션이 적절하게 작성된 경우 Recordset.Open(...,adAsyncExecute) 작업을 시작하고 다른 처리를 계속할 수 있습니다. RecordsetExecuteComplete 이벤트로 채워지면 결국 알림을 받게 됩니다.

단일 이벤트 처리기 및 여러 개체

Visual C++ 같은 프로그래밍 언어의 유연성을 통해 여러 개체에서 하나의 이벤트 처리기 프로세스 이벤트를 가질 수 있습니다. 예를 들어 여러 Connection 개체에서 하나의 Disconnect 이벤트 처리기 프로세스 이벤트가 있을 수 있습니다. 연결 중 하나가 종료되면 Disconnect 이벤트 처리기가 호출됩니다. 이벤트 처리기 개체 매개 변수가 해당 Connection 개체로 설정되기 때문에 이벤트를 발생시킨 연결을 알 수 있습니다.

참고 항목

이 기술은 Visual Basic에서 사용할 수 없습니다. 해당 언어는 하나의 개체만 이벤트 처리기와 상호 연결할 수 있기 때문입니다.

참고 항목

ADO 이벤트 처리기 요약
언어별 ADO 이벤트 인스턴스화
이벤트 매개 변수
이벤트 유형