全部显示

Recordset 属性

       

返回或设置 ADO Recordset 或 DAO Recordset 对象,代表指定窗体、报表、列表框控件或组合框控件的记录源。可读写。

expression.Recordset

expression   必需。返回“Applies To”列表中的一个对象的表达式。

说明

在 DAO 内,不能将该属性用于 ODBCDirect 记录集类型。

Recordset 属性返回的记录集对象提供窗体、报表、列表框控件或组合框控件中正被浏览的数据。例如,如果窗体是基于查询产生的,引用 Recordset 属性就相当于用同样的查询复制 Recordset 对象。但是,与使用 RecordsetClone 属性不同的是,如果更改由窗体的 Recordset 属性返回的记录集内哪条记录为当前的这一设定,就会设置窗体的当前记录。

该属性仅在使用 Visual Basic 时才可用。

Recordset 属性的读/写行为取决于该属性所标识的记录集内所包含的记录集类型(ADO 或 DAO)和数据类型(Jet 或 SQL)。

记录集类型 基于 SQL 数据 基于 Jet 数据
ADO 读/写 读/写
DAO N/A 读/写
 

下面的示例将打开一个窗体,打开一个记录集,然后通过将窗体的 Recordset 属性设为新建 Recordset 对象,从而将窗体与记录集绑定。

Global rstSuppliers As ADODB.Recordset
Sub MakeRW()
    DoCmd.OpenForm "Suppliers"
    Set rstSuppliers = New ADODB.Recordset
    rstSuppliers.CursorLocation = adUseClient
    rstSuppliers.Open "Select * From Suppliers", _
        CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    Set Forms("Suppliers").Recordset = rstSuppliers
End Sub

可以使用 Recordset 属性进行如下操作:

    Set Me.Recordset = Forms!Form1.Recordset
更改窗体的 Recordset 属性可能也将更改 RecordSourceRecordsetTypeRecordLocks 属性。同时,一些与数据相关的属性可能被覆盖;例如:FilterFilterOnOrderByOrderByOn 属性。

调用某窗体的记录集的 Requery 方法(例如,Forms(0).Recordset.Requery)可能会导致该窗体变为未绑定。若要刷新与记录集绑定的窗体中的数据,请将该窗体的 RecordSource 属性设为它自身 (Forms(0).RecordSource = Forms(0).RecordSource)。

当窗体与记录集绑定时,如果使用“按窗体筛选”命令就会出错。

示例

下面的示例使用 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