MFC: ドキュメントとビューを用いたデータベース クラスの使用
DAO でも ODBC でも、MFC データベース クラスを使用する場合に必ずしもドキュメント/ビュー アーキテクチャを使用する必要はありません。このトピックでは、特に、ドキュメントとビューの操作方法について説明します。内容は以下のとおりです。
フォーム ベース アプリケーションを作成するときに、ドキュメントのメイン ビューとして CRecordView オブジェクトまたは CDaoRecordView オブジェクトを使用する方法
ドキュメントとビューの中でレコードセット オブジェクトを使う方法
そのほかの注意点
ドキュメントやビューを使用しない方法については、「MFC : ドキュメントとビューを用いないデータベース クラスの使用」を参照してください。
フォーム ベース アプリケーションの作成
データ アクセス用の多くのアプリケーションは、フォームを使います。フォーム内のコントロールがユーザー インターフェイスの役割を果たします。ユーザーはこれらのコントロールを使って、データを検証、入力、編集します。フォームを使うアプリケーションを作成するときは、CRecordView クラスまたは CDaoRecordView クラスを使用します。MFC アプリケーション ウィザードを実行し、[データベース サポート] ページで ODBC というクライアントの種類を選択すると、プロジェクトのビュー クラスに CRecordView が使用されます。ウィザードは現在 DAO をサポートしていないため、CDaoRecordView を使用する場合は手動でコーディングする必要があります。
フォーム ベース アプリケーションでは、各レコード ビュー オブジェクトが CRecordset オブジェクトまたは CDaoRecordset オブジェクトへのポインターを持っています。フレームワークのレコード フィールド エクスチェンジ (RFX: Record Field Exchange) 機能によって、レコードセットとデータ ソース間でデータが交換されます。ダイアログ データ エクスチェンジ (DDX: Dialog Data Exchange) 機構によって、レコードセット オブジェクトのフィールド データ メンバーとフォーム上のコントロール間でデータが交換されます。CRecordView または CDaoRecordView には、フォーム上のレコード間を移動するための既定のコマンド ハンドラー関数もあります。
フォーム ベース アプリケーションをアプリケーション ウィザードで作成するには、「フォーム ベースの MFC アプリケーションの作成」および「[データベース サポート] (MFC アプリケーション ウィザード)」を参照してください。
フォームの詳細については、「レコード ビュー」を参照してください。
ドキュメントやビューとレコードセットの併用
単純なフォーム ベース アプリケーションでは、ドキュメントを使用しません。アプリケーションが複雑になると、データベースの代わりにドキュメントを使用して、データ ソースに接続されている CDatabase オブジェクトまたは CDaoDatabase オブジェクトを保存します。フォーム ベース アプリケーションでは、通常、レコードセット オブジェクトへのポインターをビュー内に保存します。フォームを使用しないデータベース アプリケーションでは、レコードセットと、CDatabase オブジェクトまたは CDaoDatabase オブジェクトをドキュメントに保存します。次に、データベース アプリケーションにおけるドキュメントの使用例を示します。
ローカルでレコードセットにアクセスするアプリケーションでは、必要に応じて、ドキュメントまたはビューのメンバー関数で、CRecordset オブジェクトまたは CDaoRecordset オブジェクトをローカルに作成します。
レコードセット オブジェクトを関数のローカル変数として宣言します。コンストラクターに NULL を渡すと、フレームワークによって CDatabase または CDaoDatabase の一時オブジェクトが作成され、開かれます。または、CDatabase あるいは CDaoDatabase のオブジェクトへのポインターを渡します。このレコードセットは関数の中だけで使用してください。ローカルなレコードセットは、関数の終了時に自動的に破棄されます。
レコードセットのコンストラクターに NULL を渡すと、フレームワークはそのレコードセットのメンバー関数 GetDefaultConnect の戻り値を使って CDatabase または CDaoDatabase を作成し、開きます。GetDefaultConnect はウィザードが自動的に作成します。
ドキュメントの存続中にレコードセットにアクセスするときは、ドキュメントに 1 個以上の CRecordset または CDaoRecordset のオブジェクトを埋め込みます。
このレコードセット オブジェクトは、ドキュメントの初期化時または必要に応じて、構築します。レコードセットが既に存在する場合はそのポインターを返し、まだ存在していない場合はレコードセットを構築して開く関数を作成することもできます。必要に応じて、レコードセットを閉じ、削除し、再作成します。または、メンバー関数 Requery を呼び出して、レコードを更新します。
ドキュメントの存続中にデータ ソースにアクセスするときは、CDatabase または CDaoDatabase のオブジェクトをドキュメントに埋め込むか、CDatabase あるいは CDaoDatabase のオブジェクトへのポインターをドキュメントに保持します。
CDatabase または CDaoDatabase のオブジェクトはデータ ソースとの接続を管理します。このオブジェクトはドキュメントの構築時に自動的に構築されますが、ドキュメントの初期化時に CDatabase オブジェクトのメンバー関数 Open を呼び出す必要があります。ドキュメントのメンバー関数でレコードセット オブジェクトを構築するときは、ドキュメントが持つ CDatabase または CDaoDatabase のオブジェクトへのポインターを渡します。これによってレコードセットとデータ ソースが関連付けられます。通常、データベース オブジェクトは、ドキュメントを閉じると、破棄されます。レコードセット オブジェクトは、通常、関数のスコープからはずれると、破棄されます。
その他の要素
フォーム ベース アプリケーションでは、フレームワークが提供するドキュメントのシリアル化機構を通常は使用しません。このような場合は、[ファイル] メニューの [新規作成] コマンドおよび [開く] コマンドの削除、無効化、および書き換えもできます。詳細については、「シリアル化 : シリアル化とデータベースの入出力」を参照してください。
フレームワークがサポートする各種のユーザー インターフェイスも利用できます。たとえば、分割ウィンドウで複数の CRecordView または CDaoRecordView のオブジェクトを使用したり、各種のマルチ ドキュメント インターフェイス (MDI: Multiple Document Interface) 子ウィンドウを使って複数のレコードセットを開いたりできます。
ビューの内容の印刷機能も CRecordView または CDaoRecordView で作成したフォームかどうかには関係なく、実装できます。CRecordView クラスと CDaoRecordView クラスは CFormView の派生クラスであるため、印刷はサポートされませんが、メンバー関数 OnPrint をオーバーライドすると印刷が可能になります。詳細については、「CFormView クラス」クラスを参照してください。
ドキュメントやビューをまったく使用しない方法もあります。これについては、「MFC : ドキュメントとビューを用いないデータベース クラスの使用」を参照してください。