本主题适用于 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 返回非零值。 在任一情况下,都不存在要操作的当前记录。 如果在 MovePrev 已为 TRUE 时调用 IsBOF,或在 MoveNext 为 TRUE 时调用 IsEOF,则框架将引发一个 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)