Form.Recordset 属性 (Access)

返回或设置表示指定对象的记录源的 ADO Recordset 或 DAO Recordset 对象。 读取/写入 对象

语法

表达式记录

expression:表示 Form 对象的变量。

备注

Recordset 属性返回 Recordset 对象,该对象提供在窗体、报表、列表框控件或组合框控件中浏览的数据。 如果表单基于查询,例如,引用 Recordset 属性等同于克隆 记录集 对象使用相同的查询。 但是,与使用不同的 RecordsetClone 属性,更改的记录当前记录集返回窗体的 记录集 属性中还设置窗体的当前记录。

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

记录集类型 基于 SQL 数据 基于 Access 数据库引擎所存储的数据
ADO 读/写 读/写
DAO 不适用 读/写

下面的示例打开窗体,打开记录集,然后将窗体的窗体的 记录集 属性设置为新创建的 记录集 对象绑定到记录集。

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 属性可以:

  • 将方法与窗体上不直接支持的 Recordset 对象结合使用。 例如,您可以使用 Recordset 属性与 ADO 查找 或 DAO 查找 方法,在自定义对话框中用于查找记录。

  • 包装事务 (,可) 围绕影响多个窗体的一组编辑回滚。

    更改窗体 Recordset 属性也可能会更改 记录源RecordsetType ,和 RecordLocks 属性。 此外,某些数据相关的属性可能会覆盖,例如, 筛选器FilterOnOrderBy ,以及 OrderByOn 属性。

    调用 重新查询 窗体的记录集 (例如, Forms(0).Recordset.Requery) 的方法可能会导致成为未绑定窗体。 若要刷新绑定到记录集的窗体中的数据,请将窗体的 RecordSource 属性设置为自身: Forms(0).RecordSource = Forms(0).RecordSource

  • 将多个表单绑定到通用数据集。 这样做允许多个窗体的同步。 例如:

      Set Me.Recordset = Forms!Form1.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

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。