Recordset 对象 (ADO)

表示基表或执行命令的结果的整个记录集。 随时,Recordset 对象仅引用集中的单个记录作为当前记录。

言论

使用 Recordset 对象来操作提供程序中的数据。 使用 ADO 时,几乎完全使用 Recordset 对象来操作数据。 所有 记录集 对象都包含记录(行)和字段(列)。 根据提供程序支持的功能,某些 Recordset 方法或属性可能不可用。

ADODB。Recordset 是用于创建 Recordset 对象的 ProgID。 引用过时 ADOR 的现有应用程序。Recordset ProgID 将继续工作,而无需重新编译,但新开发应引用 ADODB。记录集。

ADO 中定义了四种不同的游标类型:

  • 动态游标 允许查看其他用户的添加、更改和删除;允许通过不依赖于书签的 Recordset 进行所有类型的移动;如果提供程序支持书签,则允许书签。

  • 键集游标 行为类似于动态游标,只不过它阻止你看到其他用户添加的记录,并阻止访问其他用户删除的记录。 其他用户的数据更改仍将可见。 它始终支持书签,因此允许所有类型的移动通过 Recordset

  • 静态游标 提供一组记录的静态副本,用于查找数据或生成报表;始终允许书签,因此允许所有类型的移动通过 Recordset。 其他用户的添加、更改或删除将不可见。 这是打开客户端 Recordset 对象时允许的唯一类型的游标。

  • 仅向前游标 允许仅向前滚动浏览 记录集。 其他用户的添加、更改或删除将不可见。 这提高了在只需通过 Recordset进行单个传递的情况下的性能。

在打开 Recordset 之前设置 CursorType 属性以选择游标类型,或使用 Open 方法传递 CursorType 参数。 某些提供程序不支持所有游标类型。 检查提供程序的文档。 如果未指定游标类型,则默认情况下,ADO 将打开仅向前游标。

如果将 CursorLocation 属性设置为 adUseClient 以打开 Recordset,则返回的 Recordset 对象中 Field 对象的 UnderlyingValue 属性不可用。 与某些提供程序(如用于 OLE DB 的 Microsoft ODBC 提供程序与 Microsoft SQL Server 结合使用)时,可以通过使用 open 方法传递连接字符串来创建独立于以前定义的 Connection 对象的Recordset 对象。 ADO 仍创建一个 Connection 对象,但它不会将该对象分配给对象变量。 但是,如果要在同一连接上打开多个 Recordset 对象,则应显式创建并打开 连接 对象;这会将 Connection 对象分配给对象变量。 如果在打开 Recordset 对象时不使用此对象变量,则即使传递相同的连接字符串,ADO 也会为每个新的 Recordset创建一个新的 连接 对象。

可以根据需要创建任意数量的 Recordset 对象。

打开 记录集时,当前记录将定位到第一条记录(如果有),BOFEOF 属性设置为 False。 如果没有记录,则 BOFEOF 属性设置 True

可以使用 MoveFirstMoveLastMoveNextMovePrevious 方法;Move 方法;和 AbsolutePositionAbsolutePage,以及 Filter 属性来重新定位当前记录,假定提供程序支持相关功能。 仅向前 Recordset 对象仅支持 MoveNext 方法。 使用 Move 方法访问每个记录(或枚举 Recordset),可以使用 BOFEOF 属性来确定是否已超出 记录集的开头或结尾。

在使用 Recordset 对象的任何功能之前,必须对对象调用 Supports 方法,以验证该功能是否受支持或可用。 当 Supports 方法返回 false 时,不得使用该功能。 例如,仅当 Recordset.Supports(adMovePrevious) 返回 True时,才能使用 MovePrevious 方法。 否则,将收到错误,因为 Recordset 对象可能已关闭,并且实例上呈现的功能不可用。 如果不支持你感兴趣的功能,支持 也会返回 false。 在这种情况下,应避免在 Recordset 对象上调用相应的属性或方法。

Recordset 对象可以支持两种类型的更新:即时更新和批处理。 在立即更新中,调用 Update 方法后,数据的所有更改将立即写入基础数据源。 还可以使用 AddNewUpdate 方法将值数组作为参数传递,同时更新记录中的多个字段。

如果提供程序支持批处理更新,则可以让提供程序缓存更改到多个记录,然后使用 UpdateBatch 方法在对数据库的单个调用中传输这些更改。 这适用于使用 AddNewUpdateDelete 方法所做的更改。 调用 UpdateBatch 方法后,可以使用 Status 属性检查是否存在任何数据冲突以解决这些问题。

注意

若要在不使用 Command 对象的情况下执行查询,请将查询字符串传递给 Recordset 对象的 Open 方法。 但是,如果要保留命令文本并重新执行命令,或使用查询参数,则需要 Command 对象。

模式 属性控制访问权限。

Fields 集合是 Recordset 对象的默认成员。 因此,以下两个代码语句是等效的。

Debug.Print objRs.Fields.Item(0)  ' Both statements print   
Debug.Print objRs(0)              '  the Value of Item(0).  

跨进程传递 Recordset 对象时,只会封送 行集 值,并忽略 Recordset 对象的属性。 在取消合并期间,行集 将解压缩到新创建的 Recordset 对象中,该对象也将其属性设置为默认值。

Recordset 对象对于脚本是安全的。

本节包含以下主题。

另请参阅

连接对象 (ADO)
Fields 集合 (ADO)
属性集合 (ADO)
附录 A:提供程序