資料錄集:捲動 (ODBC)
更新:2007 年 11 月
本文件適用於 MFC ODBC 類別。
在您開啟一個資料錄集後,您需要存取資料錄以便顯示其值、做計算、產生報表等作業。捲動讓您可以在資料錄集的資料錄間移動。
這個主題說明:
如何在資料錄集內從一個資料錄捲動至另一個資料錄
各種捲動與不支援的情形
從一個資料錄捲動至另一個資料錄
CRecordset 類別提供可在資料錄集內捲動的 Move 成員函式。這些函式是依資料列集 (Rowset) 來移動目前的資料錄。若您已實作大量資料列擷取,Move 作業會依資料列集的大小來重新定位資料錄集。若您未實作大量資料列擷取,呼叫的 Move 函式每次便只會重新定位一個資料錄集。如需關於大量資料列擷取的詳細資訊,請參閱資料錄集:擷取大量資料錄 (ODBC)。
注意事項: |
---|
在資料錄集之間移動時,可能不會略過已刪除的資料錄。如需詳細資訊,請參閱 IsDeleted 成員函式。 |
除了 Move 函式,CRecordset 可提供用來檢查您的捲動是否有超出資料錄集的結尾或比資料錄集的開頭還前面的成員函式。
若要決定您的資料錄集是否能夠捲動,請呼叫 CanScroll 成員函式。
若要捲動
向前一筆資料錄或資料列集:呼叫 MoveNext 成員函式。
向後一筆資料錄或資料列集:呼叫 MovePrev 成員函式。
至資料錄集的第一筆資料錄:呼叫 MoveFirst 成員函式。
至資料錄集的最後一筆資料錄或資料列集:呼叫 MoveLast 成員函式。
相對於目前位置的 N 筆資料錄:呼叫 Move 成員函式。
若要測試資料錄集的結尾或開頭
下列的程式碼範例中使用 IsBOF 和 IsEOF 來偵測任意捲動方向時的資料錄集限制。
// Open a recordset; first record is current
CCustSet rsCustSet( NULL );
rsCustSet.Open( );
if( rsCustSet.IsBOF( ) )
return;
// The recordset is empty
// Scroll to the end of the recordset, past
// the last record, so no record is current
while ( !rsCustSet.IsEOF( ) )
rsCustSet.MoveNext( );
// Move to the last record
rsCustSet.MoveLast( );
// Scroll to beginning of the recordset, before
// the first record, so no record is current
while( !rsCustSet.IsBOF( ) )
rsCustSet.MovePrev( );
// First record is current again
rsCustSet.MoveFirst( );
如果資料錄集的位置超過最後一筆資料錄,則 IsEOF 會傳回非零的值,而如果資料錄集的位置是在第一筆資料錄之前 (在所有資料錄的前面),IsBOF 也會傳回非零的值。在這兩種狀況下,沒有目前的資料錄可作業。如果您在 IsBOF 已經為 TRUE 時呼叫 MovePrev,或在 IsEOF 已經為 TRUE 時呼叫 MoveNext,架構就會擲回 CDBException。您也可使用 IsBOF 和 IsEOF 來檢查一個空的資料錄集。
如需資料錄巡覽的詳細資訊,請參閱資料錄集:書籤和絕對位置 (ODBC)。
何時支援捲動
依照原始設計,SQL 只有提供順向捲動,但 ODBC 擴充了捲動的功能。根據您的應用程式所使用的 ODBC 驅動程式、驅動程式的 ODBC API 一致性層級和 ODBC 資料指標程式庫 (Cursor Library) 是否已載入至記憶體而定,捲動的可用支援層級會有所不同。如需詳細資訊,請參閱 ODBC 和 ODBC:ODBC 資料指標程式庫。
秘訣 |
---|
您可控制是否使用指標 (Cursor) 程式庫。請參閱 CDatabase::Open 的 bUseCursorLib 和 dwOptions 參數。 |
注意事項: |
---|
不同於 MFC DAO 類別,MFC ODBC 類別不提供一組可尋找下一個 (或前一個) 符合指定條件的資料錄的 Find 函式。 |