|
|
|
|
你现在的位置:您现在的位置是: 中国ASP>>数据库>>ADO教程 |
|
| ADO事件处理程序如何协同工作 |
|
无论是否实际使用事件,都必须实现 ConnectionEvent 和 RecordsetEvent 类中的所有事件处理程序。实现所需的工作量取决于所使用的编程语言。有关详细信息,请参阅不同语言的 ADO 事件实例。
Will 和 Complete 事件处理程序可以成对使用,也可分开使用。
成对的事件处理程序 如下方案描述了 Will 事件成功时的情况。 Recordset 对象具有成对的 WillChangeField 和 FieldChangeComplete 事件。在应用程序中,从更改字段的值开始,调用 WillChangeField 事件处理程序,然后返回可以接受字段更改的指示。操作完成后,FieldChangeComplete 事件通知应用程序操作已经结束。事件处理程序状态参数报告操作成功。
以下方案描述 Will 事件取消操作时的情况。 在同一个应用程序中更改另一个字段。调用 WillChangeField 事件处理程序。由于某种原因您决定不接受字段更改,因此在状态参数中返回 adStatusCancel。结果,操作未能完成。
FieldChangeComplete 事件通知操作已经结束。事件处理程序状态参数被设置为 adStatusErrorsOccurred;错误参数引用 Error 对象;Error 对象的 Number 属性被设置为指示操作已被取消的 ADO 或提供者的值。
对于同一操作可以调用多个 Will 和 Complete 事件处理程序。以下方案描述多个 Will 事件成功时的情况。 Recordset 对象具有成对的 WillChangeField、FieldChangeComplete、WillChangeRecord 和 RecordChangeComplete 事件。开始更改字段的值时,将调用 WillChangeField 事件,并返回一个可以接受字段更改的指示。
下一步,调用 WillChangeRecord 事件处理程序,再次指示操作应该完成。
注意 通常,适合 ADO 对象特定实例的所有 Will 事件处理程序都将被调用。但是,调用过程没有特定次序。
操作完成时,将调用 FieldChangeComplete 和 RecordChangeComplete 事件处理程序。
对同一操作可以调用多个 Will 和 Complete 事件处理程序,但其中一个可能取消挂起操作。以下方案描述多个 Will 事件中的最后一个事件取消操作时的情况。 Recordset 再一次具有成对的 WillChangeField、FieldChangeComplete、WillChangeRecord 和 RecordChangeComplete 事件。开始更改字段的值时,将调用 WillChangeField 事件,并返回一个可以接受字段更改的指示。
下一步,调用 WillChangeRecord 事件处理程序。也许字段更改本身可以接受,但它作为整体时将在记录中产生错误。返回 adStatusCancel,指示不接受字段更改。WillChangeField 事件处理程序已经允许进行操作。
由于 WillChangeRecord 事件处理程序取消了该操作,因此它未能完成。将状态参数设置为 adStatusErrorsOccurred,并对错误参数进行适当的设置后,调用 FieldChangeComplete 事件处理程序。
下一步,调用 RecordChangeComplete 时,仍将状态参数设置为 adStatusErrorsOccurred。对 Will 事件调用匹配的 Complete 事件。
对同一操作可以调用多个 Will 和 Complete 事件处理程序,但其中一个可能取消挂起操作。以下方案描述当事件处理程序、而不是多个 Will 事件中的最后一个事件取消操作时的情况。 Recordset 再一次具有成对的 WillChangeField、FieldChangeComplete、WillChangeRecord 和 RecordChangeComplete 事件。开始更改字段的值时,将调用 WillChangeField 事件,并返回 adStatusCancel,指示不接受字段更改。操作未完成,FieldChangeComplete 事件通知您操作已经结束,其状态和错误参数进行了适当的设置。
然而,由于第一个 Will 事件取消了操作,所以 WillChangeRecord(还有 RecordChangeComplete)事件处理程序未被调用。通常,如果 Will 事件取消操作,将不会调用余下的其他 Will 事件处理程序。
不成对的事件处理程序 通过在状态参数中返回 adStatusUnwantedEvent,可以关闭所有事件的通知。例如,当第一次调用 Complete 事件处理程序时,返回 adStatusUnwantedEvent。随后将只收到 Will 事件。
当需要检查操作中将要使用的参数时,单个 Will 事件处理程序会很有帮助。可以修改这些操作参数或取消操作。
也可以启用 Complete 事件通知。当调用第一个 Will 事件处理程序时,返回 adStatusUnwantedEvent。随后将只收到 Complete 事件。
单个 Complete 事件处理程序有助于管理异步操作。每个异步操作都有相应的 Complete 事件。
例如,预置大的 Recordset 对象要花很长时间。如果应用程序编写恰当,可以启动 Recordset.Open(...,adAsyncExecute) 操作并继续进行其他处理。最终您会在 Recordset 预置完成时收到 ExecuteComplete 事件的通知。
单个事件处理程序和多个对象 Microsoft Visual C++ 这类编程语言非常灵活,一个事件处理程序可以处理多个对象的事件。例如,一个 Disconnect 事件处理程序可以处理多个 Connection 对象的事件。如果一个连接结束,Disconnect 事件处理程序便会被调用。因为事件处理程序的对象参数被设置为相应的 Connection 对象,所以可以判断出引起事件的连接。
注意 此技术不能用于 Visual Basic,因为该语言只能将一个对象与一个事件相关联。
多个事件处理程序和单个操作 可以将一个 ADO 对象及其操作与多组事件相关联。例如,可以创建多个 WillChangeField 事件,每个事件执行一个特定字段的验证编辑。在更改字段之前,一个 Will 事件将验证字段值的某一部分,而另一个 Will 事件验证其他部分。
最好在单个事件处理程序中执行或调用所有的编辑。
|
|
|