CRecordset::Move

 

向前或向后移动到记录集,要么中的当前记录指针。

语法

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

参数

  • nRows
    前滚和后滚的行数。  正值紧接着,向记录集的结尾。  负值向后移动,朝开头。  

  • wFetchType
    确定 Move 将获取行集合。  有关详细信息,请参见备注。  

备注

如果通过值为0 nRows的,Move 刷新当前记录;,在 AddNewEdit 调用之前,Move 将终止所有当前 AddNewEdit 模式和还原当前记录的值。

备注

在记录集移动时,不能跳过已删除的记录。  请参见 CRecordset::IsDeleted 有关更多信息。  在打开包含设置的 skipDeletedRecords 选项的 CRecordsetMove 断言 nRows 参数是否为0。  此行为阻止使用相同的数据,由其他客户端应用程序中删除行的刷新。  为 skipDeletedRecords的声明参见。打开dwOption 参数。  

Move 按行集合重新定位记录集。  基于 nRowswFetchType的值,Move 获取相应的行集合然后在该行集合的第一条记录当前记录。  如果尚未实现批量取行,则行集合大小始终为1。  当获取行集合时,Move 直接调用 CheckRowsetError 成员函数来处理所有错误来源于该获取。  

根据值通过,Move 与其他 CRecordset 成员函数等效。  具体而言,wFetchType 的值可能指示是直观和通常移动当前记录的首选方法的成员函数。  

下表列出了 Move 将获取基于 wFetchTypenRowswFetchType、行集合和所有等效的成员函数的可能值与 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

备注

对于仅向前记录集,MoveSQL_FETCH_NEXT 的值才有效 wFetchType的。

警告

如果记录集没有记录,调用 Move 引发异常。  若要确定记录集是否有任何记录,调用 IsBOFIsEOF。  

备注

如果已将通过记录集的开始或结束(IsBOFIsEOF 返回非零)调用,Move 功能可能会引发 CDBException。  例如,因此,如果 IsEOF 返回非零,并 IsBOF 不,然后 MoveNext 将引发异常,但是,MovePrev 不会。  

备注

如果调用 Move,且当前记录被更新或添加时,更新丢失,而无需警告。

有关记录集导航的更多信息,请参见位于 记录集:滚动(odbc)记录集:书签和绝对位置(odbc)。  有关批量取行的更多信息,请参见文章 记录集:获取记录(odbc)。  有关相关信息,请参见。Windows SDK的ODBC API函数 SQLExtendedFetch。  

异常

Exception

Condition

此方法会引发类型 CDBException* 和 **CMemoryException***的异常。

示例

// rs is a CRecordset or a CRecordset-derived object

// Change the rowset size to 5
rs.SetRowsetSize(5);

// Open the recordset
rs.Open(CRecordset::dynaset, NULL, CRecordset::useMultiRowFetch);

// Move to the first record in the recordset
rs.MoveFirst();

// Move to the sixth record
rs.Move(5);
// Other equivalent ways to move to the sixth record:
rs.Move(6, SQL_FETCH_ABSOLUTE);
rs.SetAbsolutePosition(6);
// In this case, the sixth record is the first record in the next rowset,
// so the following are also equivalent:
rs.MoveFirst();
rs.Move(1, SQL_FETCH_NEXT);

rs.MoveFirst();
rs.MoveNext();

要求

Header: afxdb.h

请参阅

CRecordset Class
层次结构图
CRecordset::MoveNext
CRecordset::MovePrev
CRecordset::MoveFirst
CRecordset::MoveLast
CRecordset::SetAbsolutePosition
CRecordset::SetBookmark
CRecordset::IsBOF
CRecordset::IsEOF
CRecordset::CheckRowsetError