CRecordset::Move
向前或向后移动到记录集,要么中的当前记录指针。
virtual void Move(
long nRows,
WORD wFetchType = SQL_FETCH_RELATIVE
);
参数
nRows
前滚和后滚的行数。 正值紧接着,向记录集的结尾。 负值向后移动,朝开头。wFetchType
确定 Move 将获取行集合。 有关详细信息,请参见备注。
备注
如果通过值为0 nRows的,Move 刷新当前记录;,在 AddNew 或 Edit 调用之前,Move 将终止所有当前 AddNew 或 Edit 模式和还原当前记录的值。
备注
在记录集移动时,不能跳过已删除的记录。请参见 CRecordset::IsDeleted 有关更多信息。在打开包含设置的 skipDeletedRecords 选项的 CRecordset,Move 断言 nRows 参数是否为0。此行为阻止使用相同的数据,由其他客户端应用程序中删除行的刷新。为 skipDeletedRecords的声明参见。打开 的 dwOption 参数。
Move 按行集合重新定位记录集。 基于 nRows 和 wFetchType的值,Move 获取相应的行集合然后在该行集合的第一条记录当前记录。 如果尚未实现批量取行,则行集合大小始终为1。 当获取行集合时,Move 直接调用 CheckRowsetError 成员函数来处理所有错误来源于该获取。
根据值通过,Move 与其他 CRecordset 成员函数等效。 具体而言,wFetchType 的值可能指示是直观和通常移动当前记录的首选方法的成员函数。
下表列出了 Move 将获取基于 wFetchType 和 nRows的 wFetchType、行集合和所有等效的成员函数的可能值与 wFetchType对应。
wFetchType |
将获取的行集合 |
等效的成员函数 |
---|---|---|
SQL_FETCH_RELATIVE (默认值) |
开始从第一行的行集合 nRows 行在当前集合。 |
|
SQL_FETCH_NEXT |
下行集合; nRows 被忽略。 |
|
SQL_FETCH_PRIOR |
上面的行集合; nRows 被忽略。 |
|
SQL_FETCH_FIRST |
在记录集的第一行集合; nRows 被忽略。 |
|
SQL_FETCH_LAST |
在记录集中的最后一个完全行集合; nRows 被忽略。 |
|
SQL_FETCH_ABSOLUTE |
如果 nRows > 0开始,nRows 行的行集合从初始记录集。 如果 nRows < 0开始,从记录集的结尾的行集合 nRows 行。 如果 nRows = 0,开头文件(BOF)条件然后返回。 |
|
SQL_FETCH_BOOKMARK |
开始在书签值对应于 nRows行的行集合。 |
备注
对于仅向前记录集,Move 到 SQL_FETCH_NEXT 的值才有效 wFetchType的。
备注
如果已将通过记录集的开始或结束(IsBOF 或 IsEOF 返回非零)调用,Move 功能可能会引发 CDBException。例如,因此,如果 IsEOF 返回非零,并 IsBOF 不,然后 MoveNext 将引发异常,但是,MovePrev 不会。
备注
如果调用 Move,且当前记录被更新或添加时,更新丢失,而无需警告。
有关记录集导航的更多信息,请参见位于 记录集:滚动(odbc) 和 记录集:书签和绝对位置(odbc)。 有关批量取行的更多信息,请参见文章 记录集:获取记录(odbc)。 有关相关信息,请参见。Windows SDK的ODBC API函数 SQLExtendedFetch。
异常
此方法会引发类型 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