次の方法で共有


レコードセット: レコードセットの生成と破棄 (ODBC)

Note

MFC ODBC コンシューマー ウィザードは、Visual Studio 2019 以降では利用できません。 引き続き、コンシューマーを手動で作成することはできます。

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

レコードセットを使用するには、レコードセット オブジェクトを構築してから、そのメンバー関数 Open を呼び出して、レコードセットのクエリを実行し、レコードを選択します。 レコードセットを使用し終えたら、オブジェクトを閉じて破棄します。

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

実行時にレコードセットを作成する

プログラムでレコードセット オブジェクトを作成するには、通常、事前にアプリケーション固有のレコードセット クラスを記述します。 この準備手順の詳細については、「Adding an MFC ODBC Consumer」 (MFC ODBC コンシューマーの追加) を参照してください。

データ ソースからレコードを選択する必要がある場合は、ダイナセットまたはスナップショット オブジェクトを開きます。 作成するオブジェクトの種類は、アプリケーションでデータを使って行う必要があることと、ご利用の ODBC ドライバーでサポートされていることによって異なります。 詳細については、「ダイナセット」と「スナップショット」を参照してください。

レコードセットを開くには

  1. CRecordset 派生クラスのオブジェクトを構築します。

    オブジェクトは、ヒープまたは関数のスタック フレーム オブジェクト上に構築できます。

  2. 必要に応じてレコードセットの既定の動作を変更します。 使用可能なオプションについては、「レコードセットのオプションを設定する」を参照してください。

  3. オブジェクトのメンバー関数 Open を呼び出します。

コンストラクターで、ポインターを CDatabase オブジェクトに渡すか、NULL を渡して、フレームワークによって構築され、メンバー関数 GetDefaultConnect によって返される接続文字列に基づいて開かれる一時的なデータベース オブジェクトを使用します。 CDatabase オブジェクトは、データ ソースに既に接続されている場合があります。

Open への呼び出しでは、SQL を使用してデータ ソースからレコードが選択されます。 選択された最初のレコード (ある場合) が現在のレコードです。 このレコードのフィールドの値は、レコードセット オブジェクトのフィールド データ メンバーに格納されます。 いずれかのレコードが選択されていた場合は、IsBOFIsEOF の両方のメンバー関数が 0 を返します。

Open 呼び出しでは、次のことができます。

  • レコードセットがダイナセットかスナップショットかを指定します。 レコードセットは、既定でスナップショットとして開かれます。 または、一度に 1 レコードずつの前方スクロールのみを許可する順方向専用のレコードセットを指定することもできます。

    既定では、レコードセットでは CRecordset データ メンバー m_nDefaultType に格納されている既定の種類が使用されます。 ウィザードによって m_nDefaultType を初期化するコードが、ウィザードで選択したレコードセットの種類に書き込まれます。 この既定を受け入れるのではなく、別のレコードセットの種類に置き換えることもできます。

  • レコードセットによって構築される既定の SQL SELECT ステートメントを置換する文字列を指定します。

  • レコードセットを読み取り専用、または追加専用にするかどうかを指定します。 レコードセットでは既定ですべての更新が許可されていますが、それを新しいレコードの追加のみに制限したり、すべての更新プログラムを許可しないようにすることもできます。

次の例では、クラス CStudentSet (アプリケーション固有のクラス) の読み取り専用スナップショット オブジェクトを開く方法を示しています。

// Construct the snapshot object
CStudentSet rsStudent( NULL );
// Set options if desired, then open the recordset
if(!rsStudent.Open(CRecordset::snapshot, NULL, CRecordset::readOnly))
    return FALSE;
// Use the snapshot to operate on its records...

Open を呼び出した後、オブジェクトのメンバー関数とデータ メンバーを使用してレコードを処理します。 場合によっては、データ ソースで発生した変更を含めるために、クエリを再実行またはレコードセットを更新することをお勧めします。 詳しくは、「レコードセット: クエリの再実行 (ODBC)」をご覧ください。

ヒント

開発時に使用する接続文字列は、最終的にユーザーが必要とする接続文字列とは異なる場合があります。 これに関するアプリケーションの汎用化については、「データ ソース : 接続の管理 (ODBC)」をご覧ください。

レコードセット オプションの設定

レコードセット オブジェクトを構築してから、Open を呼び出してレコードを選択する前に、レコードセットの動作を制御するためのオプションをいくつか設定することができます。 すべてのレコードセットに対して、次の操作を実行できます。

  • フィルターを指定して、レコードの選択を制限する。

  • レコードの並べ替え順序を指定する。

  • 実行時に取得または計算した情報を使用してレコードを選択できるように、パラメーターを指定する。

条件が整っている場合は、次のオプションを設定することもできます。

  • レコードセットが更新可能でロック オプションがサポートされている場合は、更新に使用するロック方法を指定します。

Note

レコードの選択に影響を及ぼすには、メンバー関数 Open を呼び出す前にこれらのオプションを設定する必要があります。

レコードセットを閉じる

レコードセットを使用し終えたら、それを破棄してそのメモリの割り当てを解除する必要があります。

レコードセットを閉じるには

  1. そのメンバー関数 Close を呼び出します。

  2. レコードセット オブジェクトを破棄します。

    関数のスタック フレームで宣言した場合は、オブジェクトがスコープから外れたときに、オブジェクトが自動的に破棄されます。 そうでない場合は、delete 演算子を使います。

Close によってレコードセットの HSTMT ハンドルが解放されます。 C++ オブジェクトは破棄されません。

関連項目

レコードセット (ODBC)
レコードセット: スクロール (ODBC)
レコードセット: レコードの追加、更新、削除 (ODBC)