次の方法で共有


レコードセット (ODBC)

更新 : 2007 年 11 月

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

CRecordset オブジェクトは、データ ソースから選択したレコードの集合を表します。レコードは以下のいずれかで作成されます。

  • テーブル

  • クエリ

  • 1 つ以上のテーブルにアクセスするストアド プロシージャ

たとえば、データ ソースとして顧客一覧表があるとき、これに対するテーブル タイプのレコードセットの例としては、すべてのレコードから構成される "全顧客" レコードセットが考えられます。クエリ型レコードセットの例としては、"Joe Smith 氏宛て全請求書" レコードから構成されるレコードセットが考えられます。ストアド プロシージャ (定義済みクエリとも呼ばれます) レコードセットの例としては、"未払いの全顧客" という条件に該当するレコードから構成されるレコードセットが考えられます。このレコードセットは、バックエンド データベースのストアド プロシージャを起動します。1 つのレコードセットでは、同一のデータ ソースからの複数のテーブルを結合できますが、複数の異なるデータ ソースからのテーブルは結合できません。

5sbfs6f1.alert_note(ja-jp,VS.90).gifメモ :

ウィザードを使用してレコードセット クラスを派生させる方法については、「MFC ODBC コンシューマの追加」および「[データベース サポート] (MFC アプリケーション ウィザード)」を参照してください。

5sbfs6f1.alert_note(ja-jp,VS.90).gifメモ :

一部の ODBC ドライバは、データベースのビューをサポートしています。この場合のビューとは、SQL の CREATE VIEW ステートメントによって作成されたクエリのことです。ウィザードは現在のところビューをサポートしていませんが、自作コードでビューをサポートできます。

レコードセットの機能

どのレコードセット オブジェクトにも以下の機能が備わっています。

  • データ ソースが読み取り専用でないときは、レコードセットに対して更新可能追加可能、読み取り専用のいずれかを設定できます。レコードセットが更新可能のときは、排他または共有のロック メソッドを選択できます。ただし、ドライバがそのロックをサポートする場合に限ります。データ ソースが読み取り専用のときは、レコードセットも読み取り専用になります。

  • メンバ関数を呼び出して、選択されたレコード間をスクロール (移動) できます。

  • レコードをフィルタ処理すると、選択するレコードをさらに限定できます。

  • 1 つ以上の列を基準にしてレコードを並べ替え (昇順または降順) できます。

  • レコードセットをパラメータ化し、実行時にレコードセットの選択を限定できます。

スナップショットとダイナセット

レコードセットは、基本的に、スナップショットダイナセットの 2 種類に分類されます。どちらのレコードセットも、基本クラスは CRecordset クラスです。スナップショットとダイナセットは、レコードセットとしての基本特性は同一ですが、拡張部分が異なっています。スナップショットは、データを静的に表示するので、レポートなど、ある瞬間のデータの状態が必要なときに使うことができます。ダイナセットでは、レコードセットに対して "クエリの再実行" つまり "最新表示" を行わずに、ほかのユーザーによる更新をレコードセット内に表示できます。スナップショットもダイナセットも、更新可能または読み取り専用に設定できます。ほかのユーザーによって追加または削除されたレコードを反映するには、CRecordset::Requery を呼び出します。

また、CRecordset では、他にも動的レコードセットと前方スクロール専用レコードセットという 2 種類のレコードセットも使用できます。動的レコードセットは、ダイナセットに似ています。ただし、動的レコードセットでは、CRecordset::Requery を呼び出さずに、追加または削除されたレコードを反映できます。このため、動的レコードセットは、DBMS での処理時間が一般的に長く、多くの ODBC ドライバでもサポートされていません。それに対して、前方スクロール専用レコードセットは、更新および後方スクロールを必要としないレコードセットに対して最も効率的なデータ アクセスを提供します。たとえば、あるデータ ソースから別のデータ ソースにデータ転送を行うプログラムでは、逆方向へのスクロールが不要なため、このレコードセットを使用できます。前方スクロール専用レコードセットを使うには、以下の両方の操作を行います。

  • Open メンバ関数の nOpenType パラメータとして、CRecordset::forwardOnly オプションを渡します。

  • Open の dwOptions パラメータとして CRecordset::readOnly を渡します。

    5sbfs6f1.alert_note(ja-jp,VS.90).gifメモ :

    ダイナセット用の ODBC ドライバの必要条件については、「ODBC の基礎」を参照してください。Visual C++ のこのバージョンに含まれている ODBC ドライバ一覧、および他のドライバを取得する方法については、「ODBC ドライバの一覧」を参照してください。

レコードセットの作成

通常は、アクセスするテーブル、ビュー、またはストアド プロシージャごとに、CRecordset から派生したクラスを定義します。ただし、データベースが結合されている場合、つまり、1 つのレコードセットが複数のテーブルの列を表している場合は例外です。レコードセット クラスを派生させる場合には、ダイアログ データ エクスチェンジ (DDX: Dialog Data Exchange) 機構に似たレコード フィールド エクスチェンジ (RFX: Record Field Exchange) 機構またはバルク レコード フィールド エクスチェンジ (Bulk RFX: Bulk Record Field Exchange) 機構を使用します。RFX や Bulk RFX を使用すると、データを簡単にデータ ソースからレコードセットに転送できます。RFX では、逆にレコードセットからデータ ソースにもデータを転送できます。詳細については、「レコード フィールド エクスチェンジ (RFX)」と「レコードセット : バルク行フェッチ (ODBC)」を参照してください。

レコードセット オブジェクトでは、選択されているすべてのレコードにアクセスできます。CRecordset のメンバ関数 MoveNextMovePrev などを使うと、選択されたレコードの間を移動できます。ただし、レコードセット オブジェクトでは、選択されたレコードの 1 つである現在のレコードしか表示されません。このレコードを現在のレコードと呼びます。テーブルの列、またはデータベース クエリによって得られたレコードの列に対応するレコードセット クラスのメンバ変数を宣言すると、現在のレコードの各フィールドにアクセスできます。レコードセット データ メンバについては、「レコードセット : レコードセットの構造 (ODBC)」を参照してください。

レコードセット オブジェクトの使い方の詳細については、次のトピックを参照してください。各トピックは、機能別に分類されており、順番に参照できるようになっています。

レコードセットのオープン、読み込み、およびクローズの各機構に関するトピック

レコードセットの変更機構に関するトピック

レコードセットの高度な利用法に関するトピック

レコードセットの動作に関するトピック

参照

処理手順

MFC ODBC コンシューマの追加

概念

ODBC (Open Database Connectivity)

トランザクション (ODBC)