レコードセット: スクロール (ODBC)

このトピックの内容は、MFC ODBC クラスに該当します。

レコードセットを開いた後、値を表示する、計算する、レポートを作成するなどのために、レコードにアクセスする必要があります。 スクロールを使うと、レコードセット内のレコード間を移動できます。

このトピックでは、次の内容について説明します。

レコード間のスクロール

クラス CRecordset には、レコードセット内をスクロールするための Move メンバー関数が用意されています。 これらの関数を使い、行セットを指定して現在のレコードを移動します。 バルク行フェッチを実装している場合、Move 操作で行セットのサイズを指定してレコードセットの位置を変更できます。 バルク行フェッチを実装していない場合、Move 関数を呼び出すと、毎回 1 レコードずつレコードセットの位置を変更できます。 バルク行フェッチの詳細については、「レコードセット: バルク行フェッチ (ODBC)」を参照してください。

Note

レコードセット内を移動する場合、削除したレコードがスキップされないことがあります。 詳細については、IsDeleted メンバー関数に関するトピックを参照してください。

Move 関数に加えて、CRecordset には、レコードセットの末尾を超えてスクロールしたか、先頭より前にスクロールしたかを確認するためのメンバー関数があります。

レコードセット内のスクロールが可能かどうかを判断するには、CanScroll メンバー関数を呼び出します。

スクロールするには

  1. 1 レコードまたは 1 行セット進む: MoveNext メンバー関数を呼び出します。

  2. 1 レコードまたは 1 行セット戻る: MovePrev メンバー関数を呼び出します。

  3. レコードセットの先頭のレコードへ: MoveFirst メンバー関数を呼び出します。

  4. レコードセットの最後のレコードまたは最後の行セットへ: MoveLast メンバー関数を呼び出します。

  5. 現在の位置を基準として N レコード目: Move メンバー関数を呼び出します。

レコードセットの末尾または先頭をテストするには

  1. 末尾のレコードを超えてスクロールしましたか? IsEOF メンバー関数を呼び出します。

  2. (後方に移動して) 先頭のレコードの前にスクロールしましたか? IsBOF メンバー関数を呼び出します。

次のコード例では、IsBOFIsEOF を使って、いずれかの方向にスクロールするときのレコードセットの限界を検出します。

// 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 は 0 以外の値を返します。 IsBOF は、レコードセットが先頭のレコードの前 (すべてのレコードの前) に配置されている場合、0 以外の値を返します。 いずれの場合も、操作する現在のレコードは存在しません。 IsBOF が既に TRUE のときに MovePrev を呼び出した場合、または IsEOF が既に TRUE のときに MoveNext を呼び出した場合、フレームワークは CDBException をスローします。 また、IsBOFIsEOF を使って空のレコードセットを確認することもできます。

レコードセット操作の詳細については、「レコードセット: ブックマークと絶対位置 (ODBC)」を参照してください。

スクロールがサポートされている場合

もともと設計されているとおり、SQL には前方スクロール機能のみがありますが、ODBC によってスクロール機能を拡張できます。 スクロールを使用できるサポート レベルは、アプリケーションに使う ODBC ドライバー、ドライバーの ODBC API コンフォーマンス レベル、ODBC カーソル ライブラリがメモリに読み込まれているかどうかによって異なります。 詳細については、ODBC に関するページと「ODBC: ODBC カーソル ライブラリ」を参照してください。

ヒント

カーソル ライブラリを使うかどうかを制御できます。 「CDatabase::Open」に対する bUseCursorLib および dwOptions パラメーターを参照してください。

Note

MFC DAO クラスとは異なり、MFC ODBC クラスには、指定された条件を満たす次の (または前の) レコードを特定するための Find 関数のセットが用意されていません。

関連項目

レコードセット (ODBC)
CRecordset::CanScroll
CRecordset::CheckRowsetError
レコードセット: レコードのフィルター処理 (ODBC)