簡介
CRecordset::Move
virtual void Move( long nRows, WORD wFetchType = SQL_FETCH_RELATIVE );
throw( CDBException, CMemoryException );
參數
nRows
| 要向前或向後移動的行數。正值表示向前移動,直至移動到記錄集的尾部。負值表示向後移動,直至移動到開始處。 |
wFetchType | 確定Move將要獲取的行集。其細節參見說明部分。 |
當在記錄集中移動時,不能略過被刪除的記錄。有關的細節可以參見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( );