CRecordset::Move

virtual void Move( long nRows, WORD wFetchType = SQL_FETCH_RELATIVE );
  throw( CDBException, CMemoryException );

参数:
nRows要向前或向后移动的行数。正值表示向前移动,直至移动到记录集的尾部。负值表示向后移动,直至移动到开始处。
wFetchType确定Move将要获取的行集。其细节参见说明部分。

说明:
此成员函数用来在记录集中向前或向后移动当前记录指针。如果你给nRows传递一个为0的值,则Move刷新当前记录;Move将终止当前的AddNew或Edit模式,并且将把当前记录的值恢复到调用AddNew或Edit之前的值。
注意:
当在记录集中移动时,不能略过被删除的记录。有关的细节可以参见IsDeleted成员函数。
Move用行集来定位记录集。根据传递给nRows和wFetchType的值,Move检取相应的行集,然后将此行集中的第一个记录作为当前记录。如果你还没有实现成组行检取,则行集的大小总是1。当检取一个行集时,Move直接调用CheckRowsetError成员函数来处理检取中发生的任何错误。
Move与其他的CRecordset成员函数是等同的,这得看你所传递的值。尤其是,数值WFetchType指明了更为直观的成员函数,对于移动当前记录来说,可能更喜欢使用该方法。
下面的表列出了wFetchType可能的取值,Move根据wFectchType和nRows将获取的行集,和其它对应于wFetchType的相当的成员函数。
WfetchType获取的行集等效成员函数
SQL_FETCH_RELATIVE从当前行集的第一行开始的nRows行的行集,(缺省值) 
SQL_FETCH_NEXT下一个行集;nRows被忽略MoveNext
SQL_FETCH_PRIOR前一个行集;nRows被忽略MovePrev
SQL_FETCH_FIRST记录集中的第一个行集,nRows被忽略MoveFirst
SQL_FETCH_LAST记录集中的最后一个完整的行集;nRows被忽略MoveLast
SQL_FETCH_ABSOLUTE如果nRows > 0,行集从记录集的开始处开始nRows行。
如果nRows < 0,则行集从记录集的结尾处开始nRows行。
如果nRows = 0,则返回一个BOF条件
SetAbsolutePosition
SQL_FETCH_BOOKMARK行集开始于书签值与nRows一致的行SetBookmark
注意:
对于只向前的记录集,Move只在wFetchType的值为SQL_FETCH_NEXT才有效。
警告:
如果记录集没有记录则调用Move将抛出一个异常。要确定记录集是否有记录,可以调用IsBOF和IsEOF。

如果你已经滚动过了记录集的开始或结尾(IsBOF或IsEOF返回非零值),则调用Move函数将有可能抛出一个CDBException。例如,如果IsEOF返回非零值而IsBOF没有返回非零值,则MoveNext将抛出一个异常,而MovePrev就不会抛出异常。
如果你在当前记录被更新或增加时调用Move,则更新的值将丢失,并且不会给出警告。
有关的信息,参见“ODBC SDK程序员参考”中的ODBC API函数SQLExtendedFetch。

示例:
// rs是一个CRecordset或一个CRecordset派生对象。
// 将行集的大小改变为5
rs.SetRowsetSize( 5 );
// 移动到记录集中的第一个记录
rs.MoveFirst( );
// 移动到第六个记录
rs.Move( 5 );
// 用其它相当的方法移动到第六个记录
// rs.Move( 6, SQL_FETCH_ABSOLUTE );
// rs.SetAbsolutePosition( 6 );
// 在这种情况下,第六个记录是下一个行集的第一个记录。
// 所以下面的方法也是相当的。
// rs.Move( 1, SQL_FETCH_NEXT );
// rs.MoveNext( );

请参阅:
CRecordset::MoveNext, CRecordset::MovePrev, CRecordset::MoveFirst, CRecordset::MoveLast, CRecordset::SetAbsolutePosition, CRecordset::SetBookmark, CRecordset::IsBOF, CRecordset::IsEOF, CRecordset::CheckRowsetError