MFC : ドキュメントとビューを用いたデータベース クラスの使用
MFC データベース クラスは、ドキュメント/ビュー アーキテクチャを使って、または使わずに利用できます。 このトピックでは、ドキュメントとビューの使用に重点を置いています。 次のことについて説明します。
CRecordView
オブジェクトをドキュメントのメイン ビューとして使ったフォームベースのアプリケーションの書き方。
代替方法については、「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: ドキュメントとビューを用いないデータベース クラスの使用」を参照してください。