レコードセット (ODBC)
このトピックの内容は、MFC ODBC クラスに該当します。
CRecordset オブジェクトは、データ ソースから選択された 1 組のレコードセットです。 レコードのデータ ソース:
テーブル。
クエリ。
1 つまたは複数のテーブルにアクセスするストアド プロシージャ。
テーブルに基づくレコードセットの例は "all customers" です。これは Customer テーブルにアクセスします。 クエリの例は "all invoices for Joe Smith" です。ストアド プロシージャ (事前定義クエリと呼ばれることもあります) に基づくレコードセットの例は、"all of the delinquent accounts" です。これは、バックエンド データベースでストアド プロシージャを呼び出します。 レコードセットでデータ ソースを同じくする 2 つ以上のテーブルを結合できますが、データ ソースの異なるテーブルは結合できません。
Note
一部の ODBC ドライバーでは、データベースのビューがサポートされます。 この意味でのビューは、SQL CREATE VIEW
ステートメントでもともと作成されたクエリです。
レコードセット機能
すべてのレコードセット オブジェクトに次の機能があります。
データ ソースが読み取り専用ではない場合、レコードセットに更新可能、追加可能、または読み取り専用を指定できます。 レコードセットが更新可能な場合、適切なロッキング サポートがドライバーから与えられるとき、ペシミスティックまたはオプティミスティックのロッキング メソッドを選択できます。 データ ソースが読み取り専用の場合、レコードセットは読み取り専用になります。
メンバー関数を呼び出し、選択されているレコードをスクロールしながら見ることができます。
レコードにフィルターを適用し、利用できるレコードから選択されるレコードを絞り込むことができます。
1 つまたは複数の列に基づき、レコードを昇順または降順で並べ替えることができます。
レコードセットをパラメーター化し、実行時のレコードセット選択を修正できます。
スナップショットとダイナセット
レコードセットには、スナップショットとダイナセットという 2 種類のプリンシパルがあります。 いずれもクラス CRecordset
でサポートされています。 いずれにもすべてのレコードセットで共通の特性がありますが、さらにそれぞれのレコードセットにおいて独自の特別な方法でその共通機能が拡張されます。 スナップショットではデータが静的に表示され、レポートや、特定の時点でのデータを表示する必要がある他の状況で役に立ちます。 ダイナセットは、他のユーザーが行った更新をレコードセットに表示するときに便利です。レコードセットを再度問い合わせたり、更新したりする必要がありません。 スナップショットとダイナセットは更新可能か読み取り専用にすることができます。 他のユーザーが追加または削除したレコードを反映させるには、CRecordset::Requery を呼び出します。
CRecordset
では、他にも 2 種類のレコードセット、動的レコードセットと前方スクロール専用レコードセットが許可されます。 動的レコードセットはダイナセットに似ていますが、動的レコードの場合、CRecordset::Requery
を呼び出さなくても、追加または削除されたあらゆるレコードが反映されます。 そのため、動的レコードセットは DBMS の処理時間に関連し、一般的に高額になります。多くの ODBC ドライバーでサポートされていません。 対照的に、前方スクロール専用レコードセットの場合、更新や後方スクロールを必要としない、最も効率的な方法でレコードセットのデータにアクセスできます。 たとえば、前方スクロール専用レコードセットを使用し、データ ソース間でデータを移行します。前方にデータを動かすだけでこの移行は完了します。 前方スクロール専用レコードセットを使用するには、次の両方を行う必要があります。
Open メンバー関数の nOpenType パラメーターとしてオプション
CRecordset::forwardOnly
を渡します。Open
の dwOptions パラメーターにCRecordset::readOnly
を指定します。Note
ダイナセット サポートの ODBC ドライバー要件については、「ODBC」を参照してください。 Visual C++ のこのバージョンに含まれている ODBC ドライバー一覧、および他のドライバーを取得する方法については、「ODBC ドライバーの一覧」を参照してください。
レコードセット
アクセスする個々のテーブル、ビュー、ストアド プロシージャごとに、通常、CRecordset
から派生するクラスを定義します。 (例外は、1 つのレコードセットが 2 つ以上のテーブルの列を表すデータベース結合です)。レコードセット クラスを派生させる場合は、ダイアログ データ交換 (DDX) メカニズムに似たレコード フィールド交換 (RFX) メカニズムまたは一括レコード フィールド交換 (Bulk RFX) メカニズムを有効にします。 RFX と一括 RFX では、データ ソースからレコードセットにデータを簡単に転送できます。RFX ではまた、レコードセットからデータ セットにデータが転送されます。 詳細については、「レコード フィールド エクスチェンジ (RFX)」と「レコードセット: バルク行フェッチ (ODBC)」を参照してください。
レコードセット オブジェクトからは、選択したすべてのレコードにアクセスする許可が与えられます。 MoveNext
や MovePrev
など、CRecordset
メンバー関数を利用し、選択されている複数のレコードをスクロールして閲覧します。 レコードセット オブジェクトは同時に、選択されているレコードのうち 1 つだけ、現在のレコードを表します。 データベース クエリから結果的に生成されたテーブルまたはレコードの列に対応するレコードセット クラス メンバー変数を宣言することで、現在のレコードのフィールドを調べることができます。 レコードセット データ メンバーの詳細については、「レコードセット: 構造 (ODBC)」を参照してください。
次のトピックでは、レコードセット オブジェクトの使用について説明しています。 トピックの一覧は機能的なカテゴリに基づいて表示されており、順を追って読めるよう、自然な閲覧順になっています。
レコードセットを開き、読み、閉じるためのメカニズムに関するトピック
レコードセットの変更メカニズムに関するトピック
やや高度な手法に関するトピック
レコード セットのしくみに関するトピック
関連項目
ODBC (Open Database Connectivity)
MFC ODBC コンシューマー
トランザクション (ODBC)