并非所有的ADO Power User都意识到有一些事件,可以为它们编写代码,这些事件与Connection和Recordset对象特别相关。 如果人们知道这些事件,则对如何访问它们并不完全直观。 在下面,请找到ADO记录集和连接对象公开的事件列表。 我还将演示ADO程序员可以利用这些有价值的工具的机制。 对这些事件的深入讨论远远超出了本技巧的范围。 我的唯一目的是让您了解它们的存在,并演示您可以利用这些重要事件的方法。
- ADO Recordset对象的事件:
- FetchProgress()
- FetchComplete()
- WillChangeField()
- FieldChangeComplete()
- 将移动()
- MoveComplete()
- EndOfRecordset()
- WillChangeRecord()
- RecordChangeComplete()
- WillChangeRecordset()
- RecordsetChangeComplete
- ADO连接对象的事件:
- WillConnect()
- ConnectComplete()
- 断开()
- WillExecute()
- ExecuteComplete()
- BeginTransComplete()
- CommitTransComplete()
- RollbackTransComplete()
- InfoMessage()
- 如何访问ADO事件过程。 访问ADO事件涉及的过程涉及事件接收器。 要沉入ADO事件,您必须:
- 设置对Microsoft ActiveX数据对象XX库的引用。
- 创建一个类模块,可以是独立的类模块或表单的类模块。
- 将WithEvents变量添加到模块,最好添加到声明部分。 WithEvents是一个关键字,它指定一个对象变量将用于响应ActiveX对象触发的事件。 典型的WithEvents声明如下:
Private WithEvents cnn As ADODB.Connection Private WithEvents rst as ADODB.Recordset
- 将WithEvents添加到类模块后,VBA编辑器会将事件接收器变量添加到编辑器的下拉对象列表中。 从“对象”下拉列表中选择“事件接收器变量”后,“过程”下拉列表中将显示您可以响应的相关事件。 要为该事件接收器创建一个或多个事件过程,请在过程中编写代码以对该事件做出反应。
Private Sub cnn_ConnectComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection) 'The following code segment exists in a Form's Class Module 'display a Connected Message and enable specific Controls. 'disable the Connect Button and enable an Execute Button Me![lblConnect].Caption = "Connected to SQL Server Godzilla" Me![cmdConnect].Enabled = False Me![cmdExecute].Enabled = True End Sub
- 在代码中的某个位置(例如在表单的Load Event中),实例化事件接收器变量。 此步骤实际上与上一步骤不合顺序。 在上一步中演示代码是合乎逻辑的:
Set rst = New ADODB.Recordset
- 在代码中的其他位置(例如,在窗体的UnLoad事件中),通过将事件接收器设置为空来销毁事件接收器。
Set rst = Nothing
From: https://bytes.com/topic/access/insights/691618-ado-events-advanced-content