レコードセット: スクロール (ODBC)
このトピックの内容は、MFC ODBC クラスに該当します。
レコードセットを開いた後、値を表示する、計算する、レポートを作成するなどのために、レコードにアクセスする必要があります。 スクロールを使うと、レコードセット内のレコード間を移動できます。
このトピックでは、次の内容について説明します。
レコード間のスクロール
クラス CRecordset
には、レコードセット内をスクロールするための Move
メンバー関数が用意されています。 これらの関数を使い、行セットを指定して現在のレコードを移動します。 バルク行フェッチを実装している場合、Move
操作で行セットのサイズを指定してレコードセットの位置を変更できます。 バルク行フェッチを実装していない場合、Move
関数を呼び出すと、毎回 1 レコードずつレコードセットの位置を変更できます。 バルク行フェッチの詳細については、「レコードセット: バルク行フェッチ (ODBC)」を参照してください。
Note
レコードセット内を移動する場合、削除したレコードがスキップされないことがあります。 詳細については、IsDeleted メンバー関数に関するトピックを参照してください。
Move
関数に加えて、CRecordset
には、レコードセットの末尾を超えてスクロールしたか、先頭より前にスクロールしたかを確認するためのメンバー関数があります。
レコードセット内のスクロールが可能かどうかを判断するには、CanScroll
メンバー関数を呼び出します。
スクロールするには
1 レコードまたは 1 行セット進む: MoveNext メンバー関数を呼び出します。
1 レコードまたは 1 行セット戻る: 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
は 0 以外の値を返します。 IsBOF
は、レコードセットが先頭のレコードの前 (すべてのレコードの前) に配置されている場合、0 以外の値を返します。 いずれの場合も、操作する現在のレコードは存在しません。 IsBOF
が既に TRUE のときに MovePrev
を呼び出した場合、または IsEOF
が既に TRUE のときに MoveNext
を呼び出した場合、フレームワークは CDBException
をスローします。 また、IsBOF
と IsEOF
を使って空のレコードセットを確認することもできます。
レコードセット操作の詳細については、「レコードセット: ブックマークと絶対位置 (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)