次の方法で共有


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

更新 : 2007 年 11 月

データベース アプリケーションでフレームワークのドキュメント/ビュー アーキテクチャを使用する必要がないこともあります。このトピックでは、次の内容について説明します。

  • ドキュメントが不要な場合 (ドキュメントのシリアル化など)

  • シリアル化、およびドキュメントに関連する [ファイル] メニュー コマンド ([新規作成]、[開く]、[上書き保存]、[名前を付けて保存] など) を使用せずにアプリケーションをサポートするアプリケーション ウィザードのオプション

  • ミニマル ドキュメントを使用したアプリケーションの利用方法

  • ドキュメントやビューを持たないアプリケーションを構成する方法

ドキュメントが不要な場合

アプリケーションによっては、ドキュメントの概念がはっきりと定まっています。このようなアプリケーションでは、[ファイル] メニューの [開く] コマンドを使用してファイルの全体または大半をストレージからメモリに読み出します。次に、[ファイル] メニューの [上書き保存] または [名前を付けて保存] を使用して、更新されたすべてのファイルを一度にストレージに書き込みます。ファイルは、ユーザーにはデータ ファイルとして表示されます。

ドキュメントを必要としないアプリケーションもあります。データベース アプリケーションでは、トランザクションという概念によってデータを操作します。このようなアプリケーションでは、通常、レコードを 1 つずつデータベースから選択して表示します。ユーザーは一度に 1 つの現在のレコードしか見ることができません。メモリ上に存在するのは現在のレコードだけです。

データを保存するためのドキュメントが不要なアプリケーションを作成するときは、フレームワークが提供するドキュメント/ビュー アーキテクチャの一部または全部が不要になります。不要になる部分は作成方法によって異なります。次のことができます。

  • データ ソースへの接続状況を保存するときは、ミニマル ドキュメントを使用します。シリアル化など、通常のドキュメント機能は不要になります。この手法は、データの複数のビューを使っていて、同期を保つためにすべてのビューを同時に更新する場合などに有効です。

  • ビューではなくフレーム ウィンドウを使用し、そこに直接書き込みます。この場合は、ドキュメントを使わずに、フレーム ウィンドウ オブジェクトにデータおよびデータ接続を保存します。

ドキュメントとビューに関するアプリケーション ウィザードのオプション

MFC アプリケーション ウィザードの [データベース サポート] には、次の表に示すオプションがあります。MFC アプリケーション ウィザードでアプリケーションを作成するとき、これらすべてのオプションを選択すると、ドキュメントとビューを用いるアプリケーションが作成されます。一部のオプションでは、ドキュメントとビューから不要なドキュメント機能が省かれます。詳細については、「[データベース サポート] (MFC アプリケーション ウィザード)」を参照してください。

オプション

ビュー

ドキュメント

[なし]

CView の派生クラス

データベースはサポートされません。これは、既定の設定です。

[アプリケーションの種類] (MFC アプリケーション ウィザード) ページで [ドキュメント ビュー アーキテクチャ サポート] を選択した場合は、すべてのドキュメント機能 (シリアル化と、[ファイル] メニューの New、[開く]、[上書き保存]、および [名前を付けて保存] の各コマンドを含む) がサポートされます。「ドキュメントを持たないアプリケーション」を参照してください。

[ヘッダー ファイルのみ]

CView の派生クラス

アプリケーションに基本レベルのデータベース サポートを提供します。

Afxdb.h が含まれます。リンク ライブラリを追加しますが、データベース固有のクラスは作成しません。レコードセットを後から作成し、それを使用してレコードをチェックおよび更新できます。

[ファイル サポートのないデータベース ビュー]

CRecordView の派生クラス

ドキュメント サポートは提供されますが、シリアル化はサポートされません。ドキュメントはレコードセットを格納したり、複数のビューを調整したりできます。ドキュメントのシリアル化、[ファイル] メニューの New、[開く]、[上書き保存]、[名前を付けて保存] はサポートされません。「ミニマル ドキュメントを利用したアプリケーション」を参照してください。データベース ビューを含める場合は、データのソースを指定する必要があります。

データベースのヘッダー ファイル、リンク ライブラリ、レコード ビュー、およびレコードセットが含まれます。このオプションが使用できるのは、[アプリケーションの種類] (MFC アプリケーション ウィザード) ページで [ドキュメント ビュー アーキテクチャ サポート] が選択されているアプリケーションだけです。

[ファイル サポートのあるデータベース ビュー]

CRecordView の派生クラス

全ドキュメント機能 (シリアル化、[ファイル] メニューのドキュメント関連コマンド) がサポートされます。通常、データベース アプリケーションはファイル単位ではなくレコード単位で動作するため、シリアル化は不要です。ただし、シリアル化が使用される場合もあります。「ミニマル ドキュメントを利用したアプリケーション」を参照してください。データベース ビューを含める場合は、データのソースを指定する必要があります。

データベースのヘッダー ファイル、リンク ライブラリ、レコード ビュー、およびレコードセットが含まれます。このオプションが使用できるのは、[アプリケーションの種類] (MFC アプリケーション ウィザード) ページで [ドキュメント ビュー アーキテクチャ サポート] が選択されているアプリケーションだけです。

シリアル化機能を使わずにファイルに保存する方法、およびシリアル化機能を 2 次的な用途に利用する方法については、「シリアル化 : シリアル化とデータベースの入出力」を参照してください。

ミニマル ドキュメントを利用したアプリケーション

MFC アプリケーション ウィザードには、フォーム ベースのデータベース アプリケーションを作成するために 2 個のオプションが用意されています。これらのオプションを選択すると、CRecordView の派生ビュー クラスとドキュメントが生成されます。ドキュメントに保存される内容はオプションによって異なります。

ファイルをサポートしないドキュメント

ドキュメントのシリアル化機能を利用しないときは、アプリケーション ウィザードのデータベース オプション [ファイル サポートのないデータベース ビュー] を選択します。このオプションを選択した場合でも、ドキュメントは以下の用途に使用できます。

  • CRecordset オブジェクトの保存場所として利用できます。

    この利用法は通常のドキュメントの場合と同じです。ドキュメントにはデータ (この場合はいくつかのレコード) を保存し、ビューにはドキュメントの内容を表示します。

  • 複数のビュー (複数のレコード ビューなど) を表示するアプリケーションでは、ドキュメントはビュー間の関係を調整します。

    複数のビューで同一のデータを表す場合は、いずれかのビューでデータが変更されたとき、メンバ関数 CDocument::UpdateAllViews を使用してすべてのビューを更新できます。

通常、このオプションは、フォーム ベースの単純なアプリケーションに使用します。アプリケーション ウィザードはこの種のアプリケーションに適した構造を自動的に生成します。

ファイルをサポートするドキュメント

[ファイル] メニューのドキュメント関連コマンドとドキュメントのシリアル化機能を 2 次的な用途に使用するときは、アプリケーション ウィザードのデータベース オプション [ファイル サポートのあるデータベース ビュー] を選択します。プログラムのデータにアクセスする部分では、「ファイルをサポートしないドキュメント」に記述されているのと同じ方法でドキュメントを扱うことができます。ドキュメントのシリアル化機能を使うと、ユーザー設定を保存するユーザー プロファイル ドキュメントなどを読み書きできます。詳細については、「シリアル化 : シリアル化とデータベースの入出力」を参照してください。

アプリケーション ウィザードはこのオプションをサポートしますが、ドキュメントのシリアル化用のコードはユーザーが作成する必要があります。シリアル化する情報はドキュメント データ メンバに保存します。

ドキュメントを持たないアプリケーション

ドキュメントまたはビューを使用しないアプリケーションも作成できます。ドキュメントを使わない場合は、CRecordset オブジェクトなどのデータをフレーム ウィンドウ クラスまたはアプリケーション クラスに保存します。その他の処理は、そのアプリケーションがユーザー インターフェイスを持つかどうかによって異なります。

ユーザー インターフェイスを持つデータベース アプリケーションのサポート

ユーザー インターフェイス (コンソールのコマンド ライン インターフェイスを除く) を持つアプリケーションでは、ビューではなく、フレーム ウィンドウのクライアント領域に直接描画します。このようなアプリケーションでは、メイン ユーザー インターフェイスには、CRecordViewCFormView、または CDialog のいずれも使用しません。ただし、通常のダイアログには、CDialog を使用します。

ドキュメントを持たないアプリケーションの作成

アプリケーション ウィザードではドキュメントを持たないアプリケーションを作成できないため、CWinApp の派生クラスを独自に作成する必要があります。また、必要に応じて、CFrameWnd クラスまたは CMDIFrameWnd クラスも作成します。CWinApp::InitInstance をオーバーライドして、次のようにアプリケーション オブジェクトを宣言してください。

CYourNameApp theApp;

この場合でも、フレームワークは、メッセージ マップ機構などの多くの機能を提供します。

ユーザー インターフェイスを持たないデータベース アプリケーションのサポート

アプリケーションによっては、ユーザー インターフェイスをまったく必要としない場合や最低限のインターフェイスだけを必要とする場合があります。たとえば、次のようなアプリケーションが考えられます。

  • 他のアプリケーション (クライアント) の呼び出しに応じて起動され、アプリケーションとデータ ソースの間を中継してデータに特殊な処理を行うアプリケーション。

  • ユーザー操作が必要ないデータ処理を行うアプリケーション。たとえば、データベースの形式の変換を行うアプリケーションや、計算を行ってからバッチ的に更新を行うアプリケーションが考えられます。

CRecordset オブジェクトや CDaoRecordset オブジェクトを所有するドキュメントが存在しないため、これらのオブジェクトは CWinApp 派生のアプリケーション クラスに埋め込まれたデータ メンバとして格納します。または、以下のいずれかの処理を行います。

  • 永続的な CRecordset または CDaoRecordset のオブジェクトを持たない方法。レコードセット クラスのコンストラクタには NULL を渡します。この結果、レコードセットのメンバ関数 GetDefaultConnect の処理によって CDatabase または CDaoDatabase の一時オブジェクトが生成されます。この方法が最も多く使われます。

  • CRecordset または CDaoRecordset のオブジェクトをグローバル変数にする方法。この変数は、オーバーライド関数 CWinApp::InitInstance で動的に作成したレコードセット オブジェクトへのポインタにします。この方法を使うと、フレームワークの初期化前にオブジェクトが構築されません。

  • ドキュメントまたはビューのコンテキスト内で使う場合と同じようにレコードセット オブジェクトを使う方法。アプリケーション オブジェクトまたはフレーム ウィンドウ オブジェクトのメンバ関数でレコードセットを生成します。

参照

概念

MFC データベース クラス (ODBC と DAO)