Recordset 属性

expandtri全部显示

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

expression.Recordset

expression     必需。返回“应用于”列表中的一个对象的表达式。

说明

在 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 对象的方法。例如,您可以在用于查找记录的自定义对话框中使用带有 ADO Find 或 DAO Find 方法的 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