CRecordset::Move

王朝百科·作者佚名  2010-09-08  
宽屏版  字体: |||超大  

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被忽略MoveNextSQL_FETCH_PRIOR前一个行集;nRows被忽略MovePrevSQL_FETCH_FIRST记录集中的第一个行集,nRows被忽略MoveFirstSQL_FETCH_LAST记录集中的最后一个完整的行集;nRows被忽略MoveLastSQL_FETCH_ABSOLUTE如果nRows > 0,行集从记录集的开始处开始nRows行。

如果nRows < 0,则行集从记录集的结尾处开始nRows行。

如果nRows = 0,则返回一个BOF条件SetAbsolutePositionSQL_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( );

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有