Recordset 属性

适用对象

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 属性也将更改 RecordSourceRecordsetTypeRecordLocks 属性。 此外,与数据相关的一些属性可能会被替代,例如 FilterFilterOnOrderByOrderByOn 属性。

例如, (调用窗体的记录集的 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