CRecordset

CObject
 └CRecordset


CRecordset对象代表从一个数据源选择的一组记录的集合,被称作“记录集”。CRecordset对象可以以两种形式使用:动态集和快照。动态集是与其它用户的更新保持同步的动态数据集。快照是数据的静态视图。每一种形式都代表打开记录集时固定的一组记录。但是当滚动到动态集中的一个记录时,动态集将反映后来由其它用户或由应用程序中其它记录集对此记录所做的改变。
注意:
如果你正在使用数据访问对象(DAO)类,而不是打开数据库连接(ODBC)类,请使用类CDaoRecordset来代替。
要使用任何一种记录集,通常需要从CRecordset派生一个应用程序指定的记录集类。记录集从一个数据源中选择记录,然后你就可以:
·在这些记录中滚动。
·更新记录并指定一种加锁模式。
·过滤记录集,以获得那些从数据源中选择出来的可利用的记录。
·给记录集排序。
·参数化该记录集以定制它的具有要直到运行时才知道的信息的选项。
要使用你的类,打开一个数据库并构造一个记录集对象,给构造函数传递一个指向你的CDatabase对象的指针。然后调用记录集的Open成员函数,在此你可以指定该对象是一个动态集还是一个快照。调用Open来从数据源中选择数据。在记录集对象被打开之后,用它的成员函数和数据成员来滚动和操作记录。可用的操作根据对象是一个动态集还是一个快照(这依赖于打开数据库连接(ODBC)数据源的性能),是可更新的还是只读的,你是否实现了成组行检取而不同。为了刷新从调用Open以来可能被改变或添加的记录,可以调用对象的Requery成员函数。当你使用完对象之后,调用对象的Close成员函数,并销毁此对象。
在一个派生的CRecordset类中,使用记录字段交换(RFX)或成组记录字段交换(Bulk RFX)来支持读取和更新记录字段。
#include <afxdb.h>
请参阅:CDatabase, CRecordView


CRecordset类成员

数据成员
m_hstmt包含记录集的ODBC语句句柄。类型为HSTMT
m_nFields包含记录集中的字段数据成员数目。类型为UINT
m_nParams包含记录集中参数数据成员的数目。类型为UINT
m_pDatabase包含一个指向CDatabase对象的指针,提供该指针将记录集连接到一个数据源
m_strFilter包含一个CString,此对象指定一条结构式查询语言(SQL)的WHERE子句。此成员可用作一个过滤器,只选择符合某一标准的那些记录
m_strSort包含一个CString,此对象指定一条SQL ORDERBY子句。此成员可用于控制记录的排序

构造
CRecordset构造一个CRecordset对象。应用程序的派生类必须提供一个调用此函数的构造函数
Open通过检取记录集表示的表格或执行查询来打开记录集
Close关闭记录集和与此记录集相关联的ODBC HSTMT

记录集属性
CanAppend如果新记录可以通过
AddNew成员函数增加到记录集中,则该函数返回一个非零值
CanBookmark如果记录集支持书签则函数返回一个非零值
CanRestart如果可以调用Requery来再次运行记录集的查询,则该函数返回一个非零值
CanScroll如果应用程序可以滚动记录,则该函数返回一个非零值
CanTransact如果数据源支持事务,则该函数返回一个非零值
CanUpdate如果记录集可修改(应用程序可以增加、修改或删除记录),则该函数返回一个非零值
GetODBCFieldCount返回记录集中的字段数目
GetRecordCount返回记录集中的记录数目
GetStatus获取记录集的状态:读取记录的索引,以及是否已获取到记录的最终计数
GetTableName获取此记录集基于的表的名字
GetSQL获取用于选择记录集的记录的SQL字符串
IsOpen如果前面已经调用了Open函数,则此函数返回一个非零值
IsBOF如果记录集已经定位在第一个记录前,则此函数返回一个非零值
IsEOF如果记录集已经定位在最后一个记录后,则此函数返回一个非零值
IsDeleted如果记录集定位在一个已删除的记录上,则该函数返回一个非零值

记录集更新操作
AddNew为增加新记录作准备。调用Update来完成增加
CancelUpdate取消任何用AddNew或Edit操作指定的未决定的更新
Delete从记录集中删除当前记录。删除之后,应用程序必须显式地滚动到另一个记录
Edit为改变当前记录作准备。调用Update来完成编辑
Update通过将新数据或所编辑的数据保存到数据源上,来完成一次AddNew或Edit操作

记录集定位操作
GetBookMark将一个记录的标签值分配给该参数对象
Move将记录集双向定位到距离当前记录指定数目的记录的位置
MoveFirst定位当前记录为记录集中的第一个记录。该函数首先测试IsBOF
MoveLast定位当前记录为记录集中的最后一个记录。该函数首先测试IsEOF
MoveNext定位当前记录为记录集中的下一个记录。该函数首先测试IsEOF
MovePrev定位当前记录为记录集中的第一个记录。该函数首先测试IsBOF
SetAbsolutePosition将记录集定位到与指定的记录数相对应的位置
SetBookmark定位记录集到书签指定的位置

其他记录集操作
Cancel取消一次异步操作或一次来自第二线程的处理
FlushResultSet当使用一个预定义的查询时,如果有另外一个结果被获取,返回非零值
GetFieldValue返回记录集中的一个字段的值
GetODBCFieldInfo返回记录集中各字段的指定类别的信息
GetRowsetSize返回在一次单个获取中你要获取的记录数目
GetRowsFetched返回在一次获取中实际获取的行数
GetRowStatus返回在一次获取中行的状态
IsFieldDirty如果在当前记录中的指定字段被改变,则返回一个非零值
IsFieldNull如果当前记录中的指定字段是Null(没有值),则返回非零值
IsFieldNullable如果当前记录中的指定字段可被设置为Null(没有值),则返回非零值
RefreshRowset刷新指定行的数据和状态
Requery再次运行记录集的查询来刷新所选择的记录
SetFieldDirty标记当前记录中的指定字段是被改变的
SetFieldNull设置当前记录中的指定字段的值为Null(没有值)
SetLockingMode将加锁模式设置为“乐观”加锁(缺省值)或“悲观”加锁。确定任何更新加锁记录
SetParamNull将指定的参数设置为Null(没有值)
SetRowsetCursorPosition将游标定位在记录集中的指定行上

记录集重载函数
Check用来检查从一个ODBC API函数返回的代码
CheckRowSetError用来处理在获取记录期间产生的错误
DoBulkFieldExchange用来将一组数据行从数据源中交换到记录集中。实现成组记录交换(Bulk RFX)
DoFieldExchange用来在此记录集的字段数据成员和数据源上对应的记录之间交换数据(双向)。双向记录字段交换(RFX)
GetDefaultConnect用来获取缺省的字符串
GetDefaultSQL用来获取要执行的缺省的SQL字符串
OnSetOptions用来为指定的ODBC语句设置选项
SetRowsetSize指定在一次获取中你希望获取的记录数目