Zusammenwirken der Ereignishandler

Sofern Sie nicht in Visual Basic programmieren, müssen alle Ereignishandler für Connection- und Recordset-Ereignisse implementiert werden, unabhängig davon, ob Sie tatsächlich alle Ereignisse verarbeiten. Wie viel Implementierungsarbeit anfällt, hängt von Ihrer Programmiersprache ab. Weitere Informationen finden Sie unter ADO-Ereignisinstanziierung nach Sprache.

Verbundene Ereignishandler

Jedem Will-Ereignishandler ist ein Complete-Ereignishandler zugeordnet. Wenn Ihre Anwendung beispielsweise den Wert eines Felds ändert, wird der WillChangeField-Ereignishandler aufgerufen. Wenn die Änderung akzeptabel ist, bleibt der Parameter AdStatus unverändert bestehen, und der Vorgang wird ausgeführt. Wenn der Vorgang abgeschlossen ist, wird Ihre Anwendung von einem FieldChangeComplete-Ereignis darüber benachrichtigt, dass der Vorgang abgeschlossen ist. Wenn er erfolgreich abgeschlossen wurde, enthält adStatusadStatusOK; andernfalls enthält adStatusadStatusErrorsOccurred und Sie müssen das Fehler-Objekt überprüfen, um die Ursache des Fehlers zu ermitteln.

Wenn WillChangeField aufgerufen wird, können Sie festlegen, dass die Änderung nicht vorgenommen werden soll. Legen Sie in diesem Fall adStatus auf adStatusCancel fest. Der Vorgang wird abgebrochen, und das Ereignis FieldChangeComplete erhält den adStatus-Wert 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 Wirkung zeigt, wenn der Parameter zu Beginn der Prozedur auf adStatusCantDenyfestgelegt war.

Manchmal kann ein Vorgang mehrere Ereignisse auslösen. Beispielsweise verfügt das Recordset-Objekt über zugeordnete Ereignisse für Feld- und Datensatz-Änderungen. Wenn Ihre Anwendung beispielsweise 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 auch zulässt, dass das Ereignis fortgesetzt wird, wird die Änderung vorgenommen, und die FieldChangeComplete- und die 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 davon abhängt, dass Handlern in einer bestimmten Reihenfolge aufgerufen werden.

In Fällen, in denen mehrere Will-Ereignisse ausgelöst werden, kann eines 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 zulässt, dass das Ereignis fortgesetzt wird, wird der andere Ereignishandler aufgerufen. Wenn der Vorgang dann abgebrochen wird, werden beide Complete-Ereignisse wie in den vorherigen Beispielen aufgerufen.

Nicht verbundene Ereignishandler

Solange der an das Ereignis übergebene Status nicht der Status 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 Reason-Parameter. Wenn Sie adStatusUnwantedEvent zurückgeben, erhalten Sie zu diesem Ereignis nur noch Benachrichtigungen, wenn sie aus diesem bestimmten Grund auftreten. Mit anderen Worten erhalten Sie potenziell Benachrichtigungen aus jedem möglichen Grund, der das Ereignis ausgelöst haben könnte.

Einzelne Will-Ereignishandler können hilfreich 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 die Ereignisbenachrichtigung Complete aktiviert. Wenn Der erste Will-Ereignishandler aufgerufen wird, geben Sie adStatusUnwantedEvent zurück. Anschließend erhalten Sie nur Complete-Ereignisse.

Einzelne Complete Ereignishandler können beim Verwalten asynchroner Vorgänge hilfreich sein. Jeder asynchrone Vorgang verfügt über ein entsprechendes Complete-Ereignis.

So kann es z. B. lange dauern, bis Daten in ein großes Recordset-Objekt eingegeben worden sind. Wenn Ihre Anwendung entsprechend geschrieben ist, können Sie einen Recordset.Open(...,adAsyncExecute)-Vorgang starten und ansonsten mit der Verarbeitung fortfahren. Sie werden schließlich benachrichtigt, wenn die Daten in das Recordset von einem ExecuteComplete-Ereignis eingegeben worden sind.

Einzelne Ereignishandler und mehrere Objekte

Dank der Flexibilität einer Programmiersprache wie Visual C++ können Sie mit einem Ereignishandler Prozessereignisse aus mehreren Objekten verarbeiten. Beispielsweise können Sie einen Disconnect-Ereignishandler Ereignisse aus mehreren Connection-Objekten verarbeiten lassen. Wenn eine der Verbindungen beendet wird, würde der Disconnect-Ereignishandler aufgerufen. Sie könnten feststellen, welche Verbindung das Ereignis verursacht hat, da der Ereignishandler-Objektparameter auf das entsprechende Connection-Objekt festgelegt würde.

Hinweis

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

Weitere Informationen

ADO-Ereignishandler – Zusammenfassung
ADO-Ereignisinstanziierung nach Sprache
Ereignisparameter
Typen von Ereignissen