Zusammenwirken der Ereignishandler

Es sei denn, Sie programmieren in Visual Basic, müssen alle Ereignishandler für Connection- und Recordset-Ereignisse implementiert werden, unabhängig davon, ob Sie alle Ereignisse tatsächlich verarbeiten. Der Umfang der Implementierung, die Sie tun müssen, hängt von Ihrer Programmiersprache ab. Weitere Informationen finden Sie unter ADO-Ereignisinstanziation nach Sprache.

Gekoppelte Ereignishandler

Jeder Will-Ereignishandler verfügt über einen zugeordneten Complete-Ereignishandler. Wenn Ihre Anwendung beispielsweise den Wert eines Felds ändert, wird der WillChangeField-Ereignishandler aufgerufen. Wenn die Änderung akzeptabel ist, bleibt der AdStatus-Parameter unverändert, und der Vorgang wird ausgeführt. Wenn der Vorgang abgeschlossen ist, benachrichtigt ein FieldChangeComplete-Ereignis Ihre Anwendung, dass der Vorgang abgeschlossen ist. Wenn sie erfolgreich abgeschlossen wurde, enthält adStatusOK; andernfalls enthält adStatusErrorsOccurred, und Sie müssen das Error-Objekt überprüfen, um die Ursache des Fehlers zu ermitteln.

Wenn WillChangeField aufgerufen wird, können Sie feststellen, dass die Änderung nicht vorgenommen werden soll. Legen Sie in diesem Fall "adStatus" auf "adStatusCancel" fest. Der Vorgang wird abgebrochen, und das FieldChangeComplete-Ereignis empfängt einen adStatus-Wert von adStatusErrorsOccurred. Das Error-Objekt enthält adErrOperationCancelled , damit Ihr FieldChangeComplete-Handler weiß, dass der Vorgang abgebrochen wurde. Sie müssen jedoch den Wert des adStatus-Parameters überprüfen, bevor Sie ihn ändern, da das Festlegen von adStatus auf adStatusCancel keine Auswirkung hat, wenn der Parameter auf "adStatusCantDeny" für den Eintrag in die Prozedur festgelegt wurde.

Manchmal kann ein Vorgang mehrere Ereignisse auslösen. Beispielsweise verfügt das Recordset-Objekt über gekoppelte Ereignisse für Feldänderungen und Datensatzänderungen . Wenn Ihre Anwendung den Wert eines Felds ändert, wird der WillChangeField-Ereignishandler aufgerufen. Wenn er feststellt, dass der Vorgang fortgesetzt werden kann, wird auch der WillChangeRecord-Ereignishandler ausgelöst. Wenn dieser Handler das Ereignis auch fortsetzen kann, wird die Änderung vorgenommen, und die Ereignishandler FieldChangeComplete und RecordChangeComplete-Ereignishandler werden aufgerufen. Die Reihenfolge, in der die Will-Ereignishandler für einen bestimmten Vorgang aufgerufen werden, ist nicht definiert. Daher sollten Sie vermeiden, Code zu schreiben, der von aufrufenden Handlern in einer bestimmten Sequenz abhängt.

In Fällen, in denen mehrere Will-Ereignisse ausgelöst werden, kann eine der Ereignisse den ausstehenden Vorgang abbrechen. Wenn Ihre Anwendung beispielsweise den Wert eines Felds ändert, werden normalerweise sowohl WillChangeField als auch WillChangeRecord-Ereignishandler aufgerufen. Wenn der Vorgang jedoch im ersten Ereignishandler abgebrochen wird, wird der zugeordnete Complete-Handler sofort mit adStatusOperationCancelled aufgerufen. Der zweite Handler wird nie aufgerufen. Wenn der erste Ereignishandler jedoch das Fortsetzen des Ereignisses zulässt, wird der andere Ereignishandler aufgerufen. Wenn der Vorgang abgebrochen wird, werden beide Complete-Ereignisse wie in den vorherigen Beispielen aufgerufen.

Unbezahlte Ereignishandler

Solange der an das Ereignis übergebene Status nicht adStatusCantDeny ist, können Sie Ereignisbenachrichtigungen für jedes Ereignis deaktivieren, indem Sie "adStatusUnwantedEvent " im Status-Parameter zurückgeben. Wenn ihr Complete-Ereignishandler beispielsweise zum ersten Mal aufgerufen wird, können Sie adStatusUnwantedEvent zurückgeben. Anschließend erhalten Sie nur Will-Ereignisse . Einige Ereignisse können jedoch aus mehreren Gründen ausgelöst werden. In diesem Fall verfügt das Ereignis über einen Parameter "Reason ". Wenn Sie adStatusUnwantedEvent zurückgeben, erhalten Sie nicht mehr Benachrichtigungen für dieses Ereignis, wenn sie aus diesem bestimmten Grund auftreten. Mit anderen Worten, Sie erhalten potenziell Benachrichtigungen aus jedem möglichen Grund, dass das Ereignis ausgelöst werden könnte.

Single Will-Ereignishandler können nützlich sein, wenn Sie die Parameter untersuchen möchten, die in einem Vorgang verwendet werden. Sie können diese Vorgangsparameter ändern oder den Vorgang abbrechen.

Lassen Sie alternativ die Benachrichtigung "Complete "-Ereignis aktiviert. Wenn Der erste Will-Ereignishandler aufgerufen wird, geben Sie adStatusUnwantedEvent zurück. Anschließend erhalten Sie nur abgeschlossene Ereignisse.

Einzelne Vollständige Ereignishandler können nützlich sein, um asynchrone Vorgänge zu verwalten. Jeder asynchrone Vorgang verfügt über ein entsprechendes Complete-Ereignis .

So kann es z. B. lange dauern, bis ein großes Recordset-Objekt aufgefüllt wird. Wenn Ihre Anwendung ordnungsgemäß geschrieben ist, können Sie einen Recordset.Open(...,adAsyncExecute) Vorgang starten und mit anderen Verarbeitungen fortfahren. Sie werden schließlich benachrichtigt, wenn das Recordset von einem ExecuteComplete-Ereignis aufgefüllt wird.

Einzelne Ereignishandler und mehrere Objekte

Die Flexibilität einer Programmiersprache wie Microsoft Visual C++ ® ermöglicht es Ihnen, über einen Ereignishandlerprozessereignisse aus mehreren Objekten zu verfügen. Beispielsweise könnten Sie über ein Ereignishandlerereignisereignis von mehreren Connection-Objekten verfügen. Wenn eine der Verbindungen beendet wurde, wird der Disconnect-Ereignishandler aufgerufen. Sie könnten feststellen, welche Verbindung das Ereignis verursacht hat, da der Ereignishandlerobjektparameter auf das entsprechende Connection-Objekt festgelegt wurde.

Hinweis

Diese Technik kann nicht in Visual Basic verwendet werden, da diese Sprache nur ein Objekt mit einem Ereignishandler korrelieren kann.

Weitere Informationen

ADO-Ereignishandler – Übersicht
ADO-Ereignisinstanziierung nach Sprache
Ereignisparameter
Ereignistypen