记录集:滚动 (ODBC)

本主题适用于 MFC ODBC 类。

打开记录集后,需要访问记录以显示值、执行计算、生成报表等。 滚动可以让你在记录集中从一条记录移动到另一条记录。

本主题介绍:

从一条记录滚动到另一条记录

CRecordset 提供 Move 成员函数,用于在记录集中滚动。 这些函数按行集移动当前记录。 如果已实现大容量行提取,操作 Move 会按行集的大小重新定位记录集。 如果尚未实现大容量行提取,可以调用函数 Move 来重新定位记录集,每次移动一条记录。 有关批量行提取的详细信息,请参阅记录集:批量提取记录 (ODBC)

注意

在记录集中移动时,可能不会跳过已删除的记录。 有关详细信息,请参阅 IsDeleted 成员函数。

除了 Move 函数之外,CRecordset 还提供成员函数,用于检查是滚动到记录集的末尾还是开头。

若要确定记录集中是否可以滚动,请调用 CanScroll 成员函数。

滚动

  1. 向前滚动一条记录或一个行集:调用 MoveNext 成员函数。

  2. 向后滚动一条记录或一个行集:调用 MovePrev 成员函数。

  3. 滚动至记录集中的第一条记录:调用 MoveFirst 成员函数。

  4. 滚动至记录集中的最后一条记录或最后一个行集:调用 MoveLast 成员函数。

  5. 相对于当前位置的第 N 条记录:调用 Move 成员函数。

测试记录集的末尾或开头

  1. 是否滚动到了最后一条记录之后? 调用 IsEOF 成员函数。

  2. 是否滚动到了第一条记录之前(向后移动)? 调用 IsBOF 成员函数。

下面的代码示例在向任一方向滚动时使用 IsBOFIsEOF 检测记录集的限制。

// 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。 还可以使用 IsBOFIsEOF 检查空记录集。

有关记录集导航的详细信息,请参阅记录集:书签和绝对位置 (ODBC)

支持滚动时

与最初设计一样,SQL 仅提供向前滚动,但 ODBC 扩展了滚动功能。 滚动的可用级别取决于应用程序使用的 ODBC 驱动程序、驱动程序的 ODBC API 一致性级别以及 ODBC 游标库是否加载到内存中。 有关详细信息,请参阅 ODBCODBC:ODBC 游标库

提示

可以控制是否使用游标库。 请参阅 CDatabase::OpenbUseCursorLibdwOptions 参数。

注意

与 MFC DAO 类不同,MFC ODBC 类不提供一组 Find 函数来查找符合指定条件的下一个(或以前的)记录。

另请参阅

记录集 (ODBC)
CRecordset::CanScroll
CRecordset::CheckRowsetError
记录集:筛选记录 (ODBC)