记录集 (ODBC)
本主题适用于 MFC ODBC 类。
CRecordset 对象表示从数据源中选择的一组记录。 记录可以来自:
一个表。
查询。
访问一个或多个表的存储过程。
一个基于表的记录集示例是“所有客户”,它可以访问“客户”表。 一个查询示例是“Joe Smith 的所有发票”。一个基于存储过程(有时称为预定义查询)的记录集的示例是“所有逾期帐户”,它将调用后端数据库中的存储过程。 记录集可以联接来自同一数据源的两个或多个表,但不能联接来自不同数据源的表。
注意
某些 ODBC 驱动程序支持数据库的视图。 这种意义上的视图是最初使用 SQL CREATE VIEW
语句创建的查询。
记录集功能
所有记录集对象共享以下功能:
如果数据源不是只读的,则可以指定你的记录集为可更新的、可附加的还是只读的。 如果记录集是可更新的,则可以选择保守或乐观锁定方法,前提是驱动程序提供适当的锁定支持。 如果数据源是只读的,记录集将为只读的。
可以调用成员函数来滚动浏览所选的记录。
可以筛选记录以限制从可用记录中选择哪些记录。
可以根据一个或多个列按升序或降序对记录进行排序。
可以参数化记录集以在运行时限定记录集选择。
快照和动态集
记录集有两种主体类型:快照和动态集。 两者都受到 CRecordset
类的支持。 尽管每种类型共享所有记录集的共同特征,但每种类型也以其自身的专用方式扩展了常用功能。 快照提供数据的静态视图,对于报告和其他需要查看特定时间的数据视图的情况非常有用。 当你想使其他用户所进行的更新在记录集中可见而无需再次查询或刷新记录集时,动态集则非常有用。 快照和动态集可以是可更新的或只读的。 若要反映其他用户添加或删除的记录,请调用 CRecordset::Requery。
CRecordset
还支持两种其他类型的记录集:动态记录集和只进记录集。 动态记录集类似于动态集;但是,动态记录集反映了在不调用 CRecordset::Requery
的情况下添加或删除的任何记录。 出于此原因,通常在 DBMS 上的处理动态记录集非常耗时,并且许多 ODBC 驱动程序不支持它们。 相比之下,只进记录集为不需要更新或向后滚动的记录集提供了最有效的数据访问方法。 例如,你可以使用只进记录集将数据从一个数据源迁移到另一个数据源,在此过程中你只需向前移动数据即可。 若要使用只进记录集,必须执行以下两项操作:
将选项
CRecordset::forwardOnly
作为 Open 成员函数的“nOpenType”参数传递。在
Open
的“dwOptions”参数中指定CRecordset::readOnly
。注意
有关动态集支持的 ODBC 驱动程序要求的信息,请参阅 ODBC。 有关此版本的 Visual C++ 中包含的 ODBC 驱动程序列表以及有关获取其他驱动程序的信息,请参阅 ODBC 驱动程序列表。
记录集
对于要访问的每个不同的表、视图或存储过程,通常需要定义派生自 CRecordset
的类。 (数据库联接是一个例外情况,其中一个记录集表示来自两个或更多表的列。)当你派生一个记录集类时,将启用记录字段交换 (RFX) 机制或批量记录字段交换(批量 RFX)机制,它们类似于对话数据交换 (DDX) 机制。 RFX 和批量 RFX 简化了从数据源到记录集的数据传输;RFX 还将数据从记录集传输到数据源。 有关详细信息,请参阅记录字段交换 (RFX) 和记录集:批量提取记录 (ODBC)。
记录集对象使你可以访问所有选定的记录。 使用 CRecordset
成员函数(例如 MoveNext
和 MovePrev
)滚动浏览多个选定的记录。 同时,记录集对象仅表示所选记录中的一条,即当前记录。 可以通过声明与表的列或与数据库查询记录的列对应的记录集类成员变量来检查当前记录的字段。 有关记录集数据成员的信息,请参阅记录集:体系结构 (ODBC)。
以下主题说明了使用记录集对象的详细信息。 主题是按功能类别和自然浏览顺序列出的,以便按顺序阅读。