适用对象
ComboBox 对象 |
Form 对象 |
ListBox 对象 |
Report 对象 |
返回或设置表示指定窗体、报表、列表框控件或组合框控件的记录源的 ADO Recordset 或 DAO Recordset 对象。 可读/写。
表达式.Recordset
表达式 必需。 返回“适用范围”列表中的对象之一的表达式。
备注
Recordset 属性返回提供要在窗体、报表、列表框控件或组合框控件中浏览的数据的记录集对象。 例如,如果窗体基于查询,通过使用相同的查询引用 Recordset 属性则等效于克隆 Recordset 对象。 但是,与使用 RecordsetClone 属性不同,更改当前在由窗体的 Recordset 属性返回的记录集中的记录也将设置窗体的记录。
仅当使用 Visual Basic for Applications (VBA) 代码时,此属性才可用。
Recordset 属性的可读/写行为由记录集的类型(ADO 或 DAO)和包含在由此属性标识的记录集中的数据类型(Access 或 SQL)来确定。
Recordset 类型 |
基于 SQL 数据 |
基于 Access 数据 |
ADO |
可读/写 |
可读/写 |
DAO |
N/A |
可读/写 |
以下示例将打开一个窗体、打开一个记录集,然后通过将窗体的 Recordset 属性设置为新创建的 Recordset 对象来将它绑定到记录集。
Global rstSuppliers As ADODB.RecordsetSub MakeRW()DoCmd.OpenForm "Suppliers"Set rstSuppliers = New ADODB.RecordsetrstSuppliers.CursorLocation = adUseClientrstSuppliers.Open "Select * From Suppliers", _CurrentProject.Connection, adOpenKeyset, adLockOptimisticSet Forms("Suppliers").Recordset = rstSuppliersEnd Sub
使用 Recordset 属性执行以下操作:
-
将多个窗体绑定到一个通用数据集。 这使多个窗体能够同步。 例如,
Set Me.Recordset = Forms!Form1.Recordset
-
将窗体上不直接支持的方法与 Recordset 对象结合使用。 例如,可以在自定义对话框中将 ADO Find 或 DAO Find 方法与 Recordset 属性结合使用以查找记录。
-
使用一组影响多个窗体的编辑内容环绕一个事务(可以回滚此事务)。
更改窗体的 Recordset 属性也将更改 RecordSource、RecordsetType 和 RecordLocks 属性。 此外,与数据相关的一些属性可能会被替代,例如 Filter、FilterOn、OrderBy 和 OrderByOn 属性。
调用窗体的记录集的 Requery 方法(例如 Forms(0).Recordset.Requery)可能导致窗体变为未绑定状态。 若要刷新绑定到记录集的窗体中的数据,请将此窗体的 RecordSource 属性设置为它自身 (Forms(0).RecordSource = Forms(0).RecordSource)。
在窗体绑定到记录集后,如果通过 Form 命令使用 Filter,则会发生错误。
示例
以下示例使用 Recordset 属性从当前的窗体创建 Recordset 对象的一个新副本,然后在“调式”窗口中打印字段的名称。
Sub Print_Field_Names()
Dim rst As DAO.Recordset, intI As Integer Dim fld As Field Set rst = Me.Recordset For Each fld in rst.Fields ' Print field names. Debug.Print fld.Name Next End Sub
以下示例使用 Recordset 属性和 Recordset 对象将记录集与窗体的当前记录进行同步。 在从组合框中选择公司名称后,使用 FindFirst 方法查找该公司的记录,使窗体显示已找到的记录。
Sub SupplierID_AfterUpdate()
Dim rst As DAO.Recordset Dim strSearchName As String Set rst = Me.Recordset strSearchName = CStr(Me!SupplierID) rst.FindFirst "SupplierID = " & strSearchName If rst.NoMatch Then MsgBox "Record not found" End If rst.Close End Sub
以下代码帮助确定在不同条件下 Recordset 属性将返回什么类型的记录集。
Sub CheckRSType()
Dim rs as Object Set rs=Forms(0).Recordset If TypeOf rs Is DAO.Recordset Then MsgBox "DAO Recordset" ElseIf TypeOf rs is ADODB.Recordset Then MsgBox "ADO Recordset" End If End Sub