MFC : ドキュメントとビューを用いたデータベース クラスの使用

MFC データベース クラスは、ドキュメント/ビュー アーキテクチャを使って、または使わずに利用できます。 このトピックでは、ドキュメントとビューの使用に重点を置いています。 次のことについて説明します。

代替方法については、「MFC: ドキュメントとビューを用いないデータベース クラスの使用」を参照してください。

フォームベースのアプリケーションの作成

多くのデータアクセス アプリケーションは、フォームに基づいています。 ユーザー インターフェイスは、ユーザーがデータを調べたり、入力したり、編集したりするコントロールを含むフォームです。 フォーム ベースのアプリケーションを作成するには、クラス CRecordView を使います。 MFC アプリケーション ウィザードを実行し、[データベース サポート] ページで [ODBC] クライアント タイプを選ぶと、プロジェクトではビュー クラスに CRecordView が使われます。

フォームベースのアプリケーションでは、各レコード ビュー オブジェクトは CRecordset オブジェクトへのポインターを格納します。 フレームワークのレコード フィールド エクスチェンジ (RFX) メカニズムによって、レコードセットとデータ ソースの間でデータが交換されます。 ダイアログ データ エクスチェンジ (DDX) メカニズムは、レコードセット オブジェクトのフィールド データ メンバーとフォーム上のコントロールとの間でデータを交換します。 CRecordView には、フォーム上のレコード間で移動するための既定のコマンド ハンドラー関数も用意されています。

アプリケーション ウィザードを使ってフォームベースのアプリケーションを作成するには、「フォーム ベースの MFC アプリケーションの作成」と「[データベース サポート] (MFC アプリケーション ウィザード)」を参照してください。

フォームの詳細については、「レコード ビュー」を参照してください。

ドキュメントとビューでのレコードセットの使用

単純なフォームベースのアプリケーションの多くは、ドキュメントを必要としません。 アプリケーションがより複雑な場合は、ドキュメントをデータベースのプロキシとして使用し、データ ソースに接続する CDatabase オブジェクトを格納することをお勧めします。 フォームベースのアプリケーションでは、通常、ビューのレコードセット オブジェクトへのポインターが格納されます。 他の種類のデータベース アプリケーションでは、ドキュメントにレコードセットと CDatabase オブジェクトを格納します。 データベース アプリケーションでドキュメントを使う場合、次のような可能性があります。

  • ローカル コンテキストでレコードセットにアクセスする場合は、必要に応じてドキュメントやビューのメンバー関数で CRecordset オブジェクトをローカルに作成します。

    レコードセット オブジェクトを関数内のローカル変数として宣言します。 コンストラクターに NULL を渡すと、フレームワークが一時的な CDatabase オブジェクトを作成してオープンします。 あるいは、CDatabase オブジェクトへのポインターを渡します。 関数内でレコードセットを使い、関数が終了したときに自動的に破棄されるようにします。

    レコードセットのコンストラクターに NULL を渡すと、フレームワークはレコードセットの GetDefaultConnect メンバー関数が返す情報を使って CDatabase オブジェクトを作成し、それを開きます。 ウィザードでは、GetDefaultConnect が実装されます。

  • ドキュメントの有効期間中にレコードセットにアクセスする場合は、ドキュメントに 1 つ以上の CRecordset オブジェクトを埋め込みます。

    ドキュメントを初期化するとき、または必要に応じて、レコードセット オブジェクトを構築します。 レコードセットが既に存在する場合は、そのポインターを返す関数を記述し、まだ存在しない場合は、レコードセットを作成して開く関数を記述します。 必要に応じてレコードセットを閉じて削除し、再作成するか、Requery メンバー関数を呼び出してレコードを更新します。

  • ドキュメントの有効期間中にデータ ソースにアクセスする場合は、CDatabase オブジェクトを埋め込むか、CDatabase オブジェクトへのポインターをその中に格納します。

    CDatabase オブジェクトは、データ ソースへの接続を管理します。 このオブジェクトは、ドキュメントの構築時に自動的に構築されます。ドキュメントの初期化時にその Open メンバー関数を呼び出します。 ドキュメントのメンバー関数でレコードセット オブジェクトを構築するときは、ドキュメントの CDatabase オブジェクトへのポインターを渡します。 これにより、各レコードセットがそのデータ ソースに関連付けられます。 データベース オブジェクトは、通常、ドキュメントを閉じると破棄されます。 レコードセット オブジェクトは、通常、関数のスコープから退出すると破棄されます。

その他の要素

フォームベースのアプリケーションでは、フレームワークのドキュメント シリアル化メカニズムを使わないことが多いので、[ファイル] メニューの [新規作成][開く] コマンドを削除、無効化、または置換することができます。 記事「シリアル化: シリアル化とデータベースの入出力」を参照してください。

また、フレームワークがサポートしている多くのユーザー インターフェイスの発展性を活用することもできます。 たとえば、複数の CRecordView オブジェクトをスプリッター ウィンドウで使ったり、複数のレコードセットを異なるマルチ ドキュメント インターフェイス (MDI) の子ウィンドウで開いたりすることができます。

CRecordView で実装されたフォームであるか、他の何かであるかに関わらず、ビューの中にあるものは何でも印刷を実装したい場合があります。 CFormView から派生したクラスである CRecordView は印刷をサポートしていませんが、OnPrint メンバー関数をオーバーライドすることで印刷できるようにすることができます。 詳細については、CFormView クラスを参照してください。

ドキュメントとビューを使わずに済ませたい場合があります。 そのような場合は「MFC: ドキュメントとビューを用いないデータベース クラスの使用」を参照してください。

関連項目

MFC データベース クラス