记录集对象 (ADO)

表示来自基表的整个记录​​集或执行命令的结果。 在任何时候,Recordset 对象仅将该集合中的一条记录称为当前记录。

备注

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

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

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

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

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

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

  • 只进游标 让你可以仅向前滚动 Recordset。 其他用户进行的添加、更改或删除将不可见。 这在你需要仅对 Recordset 进行单遍遍历的情况下会提高性能。

在打开 Recordset 之前设置 CursorType 属性以选择游标类型,或使用 Open 方法传递 CursorType 参数。 某些提供程序并非支持所有游标类型。 请查看提供程序的文档。 如果未指定游标类型,则 ADO 默认会打开只进游标。

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

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

打开 Recordset 时,当前记录会定位到第一条记录(如果有)并且 BOFEOF 属性将设置为 False。 如果没有记录,BOF 和 EOF 属性将设置为 True。

可以使用 MoveFirst、MoveLast、MoveNext 和 MovePrevious 方法、Move 方法以及 AbsolutePositionAbsolutePageFilter 属性来重新定位当前记录,前提是提供程序支持相关功能。 只进 Recordset 对象仅支持 MoveNext 方法。 使用 Move 方法访问每条记录(或枚举 Recordset)时,可以使用 BOF 和 EOF 属性来确定是否超出了 Recordset 的开头或结尾。

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

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

如果提供程序支持批量更新,则可以让提供程序缓存对多条记录的更改,然后使用 UpdateBatch 方法在单个调用中将这些更改传输到数据库。 这适用于使用 AddNew、Update 和 Delete 方法进行的更改。 调用 UpdateBatch 方法后,可以使用 Status 属性检查是否存在任何数据冲突,以便解决这些冲突。

注意

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

Mode 属性控制访问权限。

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

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

在跨进程传递 Recordset 对象时,只会封送 rowset 值,而 Recordset 对象的属性将被忽略。 在拆收期间,rowset 被解包到新创建的 Recordset 对象中,该对象也将其属性设置为默认值。

Recordset 对象可以安全地用于编写脚本。

本部分包含以下主题。

另请参阅

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