MFC: ドキュメントとビューを用いないデータベース クラスの使用
場合によっては、データベース アプリケーションでフレームワークのドキュメント/ビューアーキテクチャを使用しないことがあります。 このトピックでは、次の内容について説明します。
ドキュメントのシリアル化など、ドキュメントを使用する必要がない場合。
シリアル化を行わず、ドキュメントに関連する [ファイル] メニュー ([新規]、[開く]、[保存]、[名前を付けて保存] など) がないアプリケーションをサポートする、アプリケーション ウィザードのオプション。
ドキュメントが不要な場合
一部のアプリケーションではドキュメントの概念がはっきりしています。 このようなアプリケーションでは、[ファイルを開く] コマンドを使用して、ストレージからメモリにファイルのすべてまたはほとんどを読み込みます。 [ファイルの保存] または [名前を付けて保存] コマンドを使用して、更新したファイルを一度にすべてストレージに書き込みます。 ユーザーが目にするものはデータ ファイルです。
ただし、アプリケーションのカテゴリによっては、ドキュメントが必要ありません。 データベース アプリケーションはトランザクションを単位として動作します。 アプリケーションは、データベースからレコードを選択し、(多くの場合、一度に 1 つずつ) ユーザーに提示します。 通常、ユーザーが目にするものは、1 つの最新レコードです。これは、メモリ内に 1 つしか存在しない可能性があります。
データを格納するドキュメントがアプリケーションで不要な場合は、フレームワークのドキュメント/ビュー アーキテクチャの一部またはすべてを省くことができます。 どの程度省くかは、希望する方法によって異なります。 次の方法があります。
データ ソースへの接続を格納する場所として最小限のドキュメントを使用しますが、シリアル化のような通常のドキュメント機能を省きます。 これは、データの複数のビューが必要で、すべてのビューを同期して一度にすべてを更新する必要がある場合に役立ちます。
ビューを使用する代わりに、直接描画するフレーム ウィンドウを使用します。 この場合は、ドキュメントを省いて、データまたはデータ接続をフレーム ウィンドウ オブジェクトに格納します。
ドキュメントとビューのアプリケーション ウィザード オプション
MFC アプリケーション ウィザードには、[Select database support]\(データベース サポートの選択\) にいくつかのオプションがあります。次の表にこれらを示します。 MFC アプリケーション ウィザードを使用してアプリケーションを作成する場合、これらのすべてのオプションによって、ドキュメントとビューを含むアプリケーションが生成されます。 一部のオプションで提供されるドキュメントとビューでは、不要なドキュメント機能が省略されます。 詳細については、「[データベース サポート] (MFC アプリケーション ウィザード)」を参照してください。
オプション | 表示 | Document |
---|---|---|
なし | CView から派生。 |
データベースのサポートは提供されません。 既定のオプションです。 [アプリケーションの種類] (MFC アプリケーション ウィザード) ページで [Document/view architecture support]\(ドキュメント/ビュー アーキテクチャ サポート\) オプションを選択すると、シリアル化、および [ファイル] メニューの [新規]、[開く]、[保存]、[名前を付けて保存] コマンドを含む、完全なドキュメント サポートを得ることができます。 「ドキュメントのないアプリケーション」を参照してください。 |
Header files only\(ヘッダー ファイルのみ\) | CView から派生。 |
基本的なレベルのデータベース サポートをアプリケーションに提供します。 Afxdb.h が含まれます。 リンク ライブラリは追加されますが、データベース固有のクラスは作成されません。 ユーザーがレコードセットを後で作成し、それらを使用してレコードを調べて更新することができます。 |
ファイル サポートのないデータベース ビュー | CRecordView から派生 |
ドキュメント サポートを提供しますが、シリアル化のサポートは提供しません。 ドキュメントはレコードセットを格納し、複数のビューを調整できます。シリアル化または [新規]、[開く]、[保存]、[名前を付けて保存] のコマンドはサポートされません。 「最小限のドキュメントを含むアプリケーション」を参照してください。 データベース ビューを含める場合は、データのソースを指定する必要があります。 データベース ヘッダー ファイル、リンク ライブラリ、レコード ビュー、およびレコードセットが含まれます。 ( [アプリケーションの種類] (MFC アプリケーション ウィザード) ページで [Document/view architecture support]\(ドキュメント/ビュー アーキテクチャ サポート\) オプションが選択されたアプリケーションのみで使用可能。) |
ファイル サポートのあるデータベース ビュー | CRecordView から派生 |
シリアル化およびドキュメントに関連する [ファイル] メニュー コマンドを含む、完全なドキュメント サポートを提供します。 データベース アプリケーションは通常、ファイル単位ではなくレコード単位で動作します。そのため、シリアル化は不要です。 ただし、特にシリアル化の用途がある場合もあります。 「最小限のドキュメントを含むアプリケーション」を参照してください。 データベース ビューを含める場合は、データのソースを指定する必要があります。 データベース ヘッダー ファイル、リンク ライブラリ、レコード ビュー、およびレコードセットが含まれます。 ( [アプリケーションの種類] (MFC アプリケーション ウィザード) ページで [Document/view architecture support]\(ドキュメント/ビュー アーキテクチャ サポート\) オプションが選択されたアプリケーションのみで使用可能。) |
シリアル化の代替の詳細やシリアル化の代替手段については、「シリアル化: シリアル化とデータベースの入出力」を参照してください。
最小限のドキュメントを含むアプリケーション
MFC アプリケーション ウィザードには、フォームベースのデータ アクセス アプリケーションをサポートする 2 つのオプションがあります。 各オプションによって、CRecordView
から派生したビュー クラスとドキュメントが作成されます。 これらは、ドキュメントから何を除外するかという点が異なります。
ファイル サポートのないドキュメント
ドキュメントのシリアル化が必要ない場合は、アプリケーション ウィザードのデータベース オプション [ファイル サポートのないデータベース ビュー] を選択します。 このドキュメントでは、次の有益な目的について説明します。
これは
CRecordset
オブジェクトを格納するのに便利な場所です。この使用方法は通常のドキュメントの概念に相当します。ドキュメントはデータ (あるいは、このケースでは一連のレコード) を格納し、ビューはドキュメントのビューです。
アプリケーションが複数のビュー (複数のレコード ビューなど) を提示する場合、ドキュメントがビューの調整をサポートします。
複数のビューに同一データが表示される場合、いずれかのビューでデータが変更されると、
CDocument::UpdateAllViews
メンバー関数を使用して、すべてのビューの更新を調整できます。
通常、このオプションは、単純なフォームベースのアプリケーションで使用します。 アプリケーション ウィザードは、このようなアプリケーションにとって便利な構造を自動的にサポートします。
ファイル サポートのあるドキュメント
ドキュメントに関連する [ファイル] メニュー コマンドとドキュメントのシリアル化の代替方法がある場合には、アプリケーション ウィザードのデータベース オプション [Database view with file support]\(ファイル サポートのあるデータベース ビュー\) を選択します。 プログラムのデータ アクセスの部分では、「ファイル サポートのないドキュメント」の説明と同じ方法でドキュメントを使用できます。 ドキュメントのシリアル化機能を使用できます。たとえば、ユーザーの設定やその他の有用な情報が格納されている、シリアル化されたユーザー プロファイル ドキュメントの読み取りや書き込みを行うことができます。 その他の情報については、「シリアル化: シリアル化とデータベースの入出力」を参照してください。
アプリケーション ウィザードではこのオプションがサポートされていますが、ドキュメントをシリアル化するコードを記述する必要があります。 ドキュメント データ メンバーにシリアル化された情報を格納します。
ドキュメントのないアプリケーション
場合によっては、ドキュメントやビューを使用しないアプリケーションを作成する必要があります。 ドキュメントがないため、データ (CRecordset
オブジェクトなど) をフレーム ウィンドウ クラスまたはアプリケーション クラスに格納します。 その他の要件は、アプリケーションがユーザー インターフェイスを提示するかどうかによって異なります。
ユーザー インターフェイスを含むデータベース サポート
ユーザー インターフェイス (コンソールのコマンドライン インターフェイス以外) がある場合、アプリケーションは、ビューではなくフレーム ウィンドウのクライアント領域に直接描画します。 このようなアプリケーションでは、メインのユーザー インターフェイスに対して CRecordView
、CFormView
、または CDialog
を使用することはありませんが、通常のダイアログに対しては CDialog
を使用します。
ドキュメントのないアプリケーションの記述
アプリケーション ウィザードでは、ドキュメントのないアプリケーションの作成はサポートされていないため、独自の CWinApp
派生クラスを記述し、必要に応じて CFrameWnd
クラスまたは CMDIFrameWnd
クラスも作成する必要があります。 CWinApp::InitInstance
をオーバーライドし、次のようにアプリケーション オブジェクトを宣言します。
CYourNameApp theApp;
フレームワークは、引き続き、メッセージマップ メカニズムとその他多くの機能を提供します。
ユーザー インターフェイスと切り離されたデータベース サポート
アプリケーションによっては、ユーザー インターフェイスを必要としないものも、最小限のユーザー インターフェイスのみが必要なものもあります。 たとえば、以下を記述しているとします。
アプリケーションとデータ ソース間のデータの特別な処理を行うために他のアプリケーション (クライアント) が呼び出す中間データアクセス オブジェクト。
ユーザーの介入なしにデータを処理するアプリケーション。たとえば、あるデータベース形式から別のデータベース形式にデータを移すアプリケーションや、計算を行ってバッチ更新を実行するアプリケーションなど。
CRecordset
オブジェクトを所有するドキュメントはないため、埋め込みデータ メンバーとして CWinApp
派生アプリケーション クラスに格納することをお勧めします。 代替手段は次のとおりです。
永続的な
CRecordset
オブジェクトをまったく保持しません。 NULL をレコードセット クラス コンストラクターに渡すことができます。 その場合、フレームワークは、レコードセットのGetDefaultConnect
メンバー関数の情報を使用して一時CDatabase
オブジェクトを作成します。 これは、最も可能性の高い代替方法です。CRecordset
オブジェクトをグローバル変数にします。 この変数は、CWinApp::InitInstance
のオーバーライドで動的に作成するレコードセット オブジェクトへのポインターである必要があります。 これにより、フレームワークが初期化される前にオブジェクトを構築しようとせずにすみます。ドキュメントまたはビューの場合と同様にレコードセット オブジェクトを使用します。 アプリケーションまたはフレーム ウィンドウ オブジェクトのメンバー関数でレコードセットを作成します。