记录集:滚动 (ODBC)
本主题适用于 MFC ODBC 类。
打开记录集后,需要访问记录以显示值、执行计算、生成报表等。 滚动可以让你在记录集中从一条记录移动到另一条记录。
本主题介绍:
从一条记录滚动到另一条记录
类 CRecordset
提供 Move
成员函数,用于在记录集中滚动。 这些函数按行集移动当前记录。 如果已实现大容量行提取,操作 Move
会按行集的大小重新定位记录集。 如果尚未实现大容量行提取,可以调用函数 Move
来重新定位记录集,每次移动一条记录。 有关批量行提取的详细信息,请参阅记录集:批量提取记录 (ODBC)。
注意
在记录集中移动时,可能不会跳过已删除的记录。 有关详细信息,请参阅 IsDeleted 成员函数。
除了 Move
函数之外,CRecordset
还提供成员函数,用于检查是滚动到记录集的末尾还是开头。
若要确定记录集中是否可以滚动,请调用 CanScroll
成员函数。
滚动
向前滚动一条记录或一个行集:调用 MoveNext 成员函数。
向后滚动一条记录或一个行集:调用 MovePrev 成员函数。
滚动至记录集中的第一条记录:调用 MoveFirst 成员函数。
滚动至记录集中的最后一条记录或最后一个行集:调用 MoveLast 成员函数。
相对于当前位置的第 N 条记录:调用 Move 成员函数。
测试记录集的末尾或开头
下面的代码示例在向任一方向滚动时使用 IsBOF
和 IsEOF
检测记录集的限制。
// Open a recordset; first record is current
CCustSet rsCustSet( NULL );
rsCustSet.Open( );
if( rsCustSet.IsBOF( ) )
return;
// The recordset is empty
// Scroll to the end of the recordset, past
// the last record, so no record is current
while ( !rsCustSet.IsEOF( ) )
rsCustSet.MoveNext( );
// Move to the last record
rsCustSet.MoveLast( );
// Scroll to beginning of the recordset, before
// the first record, so no record is current
while( !rsCustSet.IsBOF( ) )
rsCustSet.MovePrev( );
// First record is current again
rsCustSet.MoveFirst( );
如果记录集定位在最后一条记录之后,则 IsEOF
返回非零值。 如果记录集定位在第一条记录之前(在所有记录之前),则 IsBOF
返回非零值。 在任一情况下,都不存在要操作的当前记录。 如果在 IsBOF
已为 TRUE 时调用 MovePrev
,或在 IsEOF
为 TRUE 时调用 MoveNext
,则框架将引发一个 CDBException
。 还可以使用 IsBOF
和 IsEOF
检查空记录集。
有关记录集导航的详细信息,请参阅记录集:书签和绝对位置 (ODBC)。
支持滚动时
与最初设计一样,SQL 仅提供向前滚动,但 ODBC 扩展了滚动功能。 滚动的可用级别取决于应用程序使用的 ODBC 驱动程序、驱动程序的 ODBC API 一致性级别以及 ODBC 游标库是否加载到内存中。 有关详细信息,请参阅 ODBC 和 ODBC:ODBC 游标库。
提示
可以控制是否使用游标库。 请参阅 CDatabase::Open 的 bUseCursorLib 和 dwOptions 参数。
注意
与 MFC DAO 类不同,MFC ODBC 类不提供一组 Find
函数来查找符合指定条件的下一个(或以前的)记录。
另请参阅
记录集 (ODBC)
CRecordset::CanScroll
CRecordset::CheckRowsetError
记录集:筛选记录 (ODBC)