次の方法で共有


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

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

レコードセットを開いたら、各レコードにアクセスして値の表示、計算、レポート生成などを行います。レコードにアクセスするには、スクロールによってレコードセット内のレコード間を移動します。

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

  • レコードセット内のレコード間を移動 (スクロール) する方法

  • スクロールが利用できる条件

レコードセット内のレコード間を移動 (スクロール) する方法

CRecordset クラスには、レコードセット内をスクロールするための Move メンバー関数が用意されています。各メンバー関数は、データを現在のレコードから行セット単位でスクロールします。バルク行フェッチを実装している場合、レコードセットのレコードは、Move を呼び出すごとに行セット単位でスクロールされます。バルク行フェッチを実装していない場合、Move を呼び出すごとに、レコードセットのレコードは 1 つだけスクロールされます。バルク行フェッチの詳細については、「レコードセット : バルク行フェッチ (ODBC)」を参照してください。

[!メモ]

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

CRecordset には、Move 関数のほかに、レコードセットの先頭または末尾を越えてスクロールしたかどうかを調べるためのメンバー関数も用意されています。

レコードセット内でスクロールできるかどうかを調べるには、メンバー関数 CanScroll を呼び出します。

スクロールを行うには

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

  2. 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 以外の値を返します。いずれの場合も、操作対象となる現在のレコードがありません。IsBOFTRUE の場合に MovePrev を呼び出すか、IsEOFTRUE の場合に MoveNext を呼び出すと、フレームワークによって CDBException がスローされます。IsBOFIsEOF の両方を使用すると、レコードセットが空かどうかを調べることもできます。

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

スクロールが利用できる条件

SQL は、本来前方向へのスクロールだけを行うようにデザインされていますが、ODBC によって両方向にスクロールできるように拡張されています。スクロールのサポート レベルは、アプリケーションで使用する ODBC ドライバーの種類、ドライバーの ODBC API 準拠レベル、および ODBC カーソル ライブラリがメモリに読み込まれているかどうかによって異なります。詳細については、「ODBC の基礎」と「ODBC : ODBC カーソル ライブラリ」を参照してください。

ヒントヒント

プログラマは、カーソル ライブラリを使用するかどうかを選択できます。「CDatabase::Open」の bUseCursorLib パラメーターおよび dwOptions パラメーターを参照してください。

[!メモ]

MFC DAO クラスとは異なり、MFC ODBC クラスには、指定した条件に合致するレコードに移動するための一連の Find 関数がありません。

参照

関連項目

CRecordset::CanScroll

CRecordset::CheckRowsetError

概念

レコードセット (ODBC)

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