MFC:使用不具文件和檢視的資料庫類別

有時候,您可能不想在資料庫應用程式中使用架構的檔/檢視架構。 本主題將說明:

當您不需要檔時

某些應用程式具有檔的不同概念。 這些應用程式通常會使用 [檔案開啟 ] 命令,將所有或大部分的檔案從儲存體載入記憶體。 他們會使用 [檔案儲存 ] 或 [另存新 檔] 命令,一次將所有更新的檔案寫回儲存體。 使用者看到的內容是資料檔案。

不過,某些類別的應用程式不需要檔。 資料庫應用程式會以交易方式運作。 應用程式會從資料庫選取記錄,並將其呈現給使用者,通常是一次一筆記錄。 使用者看到的通常是單一目前記錄,這可能是記憶體中唯一的記錄。

如果您的應用程式不需要檔來儲存資料,您可以免除部分或所有架構的檔/檢視架構。 您省下多少取決於您偏好的方法。 您可以:

  • 使用最少的檔作為儲存資料來源連線的位置,但免除一般檔功能,例如序列化。 當您想要數個數據檢視並想要同步處理所有檢視、一次更新這些檢視等等時,這非常有用。

  • 使用您直接繪製的框架視窗,而不是使用檢視。 在此情況下,您會省略檔,並將任何資料或資料連線儲存在框架視窗物件中。

檔和檢視的應用程式精靈選項

MFC 應用程式精靈在 [選取資料庫支援 ] 中有 數個選項,如下表所列。 如果您使用 MFC 應用程式精靈來建立應用程式,所有這些選項都會產生具有檔和檢視的應用程式。 某些選項提供省略不必要的檔功能的檔和檢視。 如需詳細資訊,請參閱 資料庫支援、MFC 應用程式精靈

選項 檢視 文件
None 衍生自 CView 沒有資料庫支援。 這是預設選項。

如果您在 [應用程式類型]、[MFC 應用程式精靈 ] 頁面上選取 [檔/檢視架構支援] 選項 ,您會在 [檔案] 功能表上取得完整的檔支援 ,包括序列化和 [新增 ]、 [開啟 ]、 [儲存 ] 和 [ 另存新檔 ] 命令。 請參閱 沒有檔 的應用程式。
僅限標頭檔 衍生自 CView 提供應用程式的基本資料庫支援層級。

包含 Afxdb.h。 新增程式庫,但不會建立任何資料庫特定的類別。 您可以稍後建立記錄集,並使用它們來檢查和更新記錄。
沒有檔案支援的資料庫檢視 來自 CRecordView 提供檔支援,但沒有序列化支援。 檔可以儲存記錄集並協調多個檢視;不支援序列化或 [新增 ]、 [開啟 ]、 [儲存 ] 和 [ 另存新檔 ] 命令。 請參閱 具有最少檔 的應用程式。 如果您包含資料庫檢視,則必須指定資料來源。

包含資料庫標頭檔、程式庫、記錄檢視和記錄集。 (僅適用于具有 的應用程式在 [應用程式類型]、[MFC 應用程式精靈 ] 頁面上選取 的檔/檢視架構支援 選項。
具有檔案支援的資料庫檢視 來自 CRecordView 提供完整的檔支援,包括序列化和檔相關的 [檔案 ] 功能表命令。 資料庫應用程式通常會以每筆記錄為基礎運作,而不是以個別檔案為基礎運作,因此不需要序列化。 不過,您可能有序列化的特殊用途。 請參閱 具有最少檔 的應用程式。 如果您包含資料庫檢視,則必須指定資料來源。

包含資料庫標頭檔、程式庫、記錄檢視和記錄集。 (僅適用于具有 的應用程式在 [應用程式類型]、[MFC 應用程式精靈 ] 頁面上選取 的檔/檢視架構支援 選項。

如需序列化替代專案和序列化替代用法的討論,請參閱 序列化:序列化與資料庫輸入/輸出

具有最少檔的應用程式

MFC 應用程式精靈有兩個選項可支援表單型資料存取應用程式。 每個選項都會 CRecordView 建立衍生的檢視類別和檔。 它們與排除在檔中的內容不同。

沒有檔案支援的檔

如果您不需要檔序列化,請選取 [應用程式精靈資料庫] 選項 [資料庫檢視],而不需支援 檔案。 檔提供下列實用用途:

  • 這是儲存物件的便利位置 CRecordset

    此使用方式會平行處理一般檔概念:檔會儲存資料(或在此案例中是一組記錄),而檢視則是檔的檢視。

  • 如果您的應用程式呈現多個檢視(例如多個記錄檢視),則檔支援協調檢視。

    如果多個檢視顯示相同的資料,您可以在任何檢視變更資料時,使用 CDocument::UpdateAllViews 成員函式來協調所有檢視的更新。

您通常會針對簡單的表單型應用程式使用此選項。 應用程式精靈會自動支援這類應用程式的便利結構。

具有檔案支援的檔

當您有檔相關 檔案功能表命令和檔序列化的替代用法時,請選取應用程式精靈資料庫選項 [資料庫檢視與檔案支援 ]。 針對程式的資料存取部分,您可以使用與檔沒有檔案支援 中所述 的相同方式使用檔。 例如,您可以使用檔的序列化功能來讀取和寫入儲存使用者喜好設定或其他實用資訊的序列化使用者設定檔檔。 如需詳細資訊,請參閱 序列化:序列化與資料庫輸入/輸出

應用程式精靈支援此選項,但您必須撰寫序列化檔的程式碼。 將序列化資訊儲存在檔資料成員中。

沒有檔的應用程式

您有時可能會想要撰寫不使用檔或檢視的應用程式。 如果沒有檔,您可以將您的資料(例如 CRecordset 物件)儲存在框架視窗類別或應用程式類別中。 任何其他需求取決於應用程式是否呈現使用者介面。

使用者介面的資料庫支援

如果您有使用者介面(例如主控台命令列介面以外),您的應用程式會直接繪製到框架視窗的工作區,而不是繪製到檢視中。 這類應用程式不會針對其主要使用者介面使用 CRecordViewCFormViewCDialog ,但通常會 CDialog 用於一般對話。

撰寫沒有檔的應用程式

因為應用程式精靈不支援在沒有檔的情況下建立應用程式,因此您必須撰寫自己的 CWinApp 衍生類別,並視需要建立 CFrameWndCMDIFrameWnd 類別。 覆寫 CWinApp::InitInstance 並宣告應用程式物件為:

CYourNameApp theApp;

架構仍然提供訊息對應機制和其他許多功能。

資料庫支援與使用者介面分開

某些應用程式不需要使用者介面,或只需要最少的使用者介面。 例如,假設您正在撰寫:

  • 其他應用程式(用戶端)呼叫的中繼資料存取物件,用於在應用程式與資料來源之間特殊處理資料。

  • 在不進行使用者介入的情況下處理資料的應用程式,例如將資料從某個資料庫格式移至另一個或執行批次更新的應用程式。

因為沒有檔擁有 CRecordset 物件,所以您可能想要將它儲存為衍生應用程式類別中的 CWinApp 內嵌資料成員。 替代方案包括:

  • 完全不保留永久 CRecordset 物件。 您可以將 Null 傳遞至記錄集類別建構函式。 在此情況下,架構會使用記錄集 GetDefaultConnect 成員函式中的資訊來建立暫存 CDatabase 物件。 這是最有可能的替代方法。

  • CRecordset 物件設為全域變數。 此變數應該是您在覆寫中 CWinApp::InitInstance 動態建立之記錄集物件的指標。 這可避免在初始化架構之前嘗試建構 物件。

  • 使用記錄集物件,就像在檔或檢視的內容中一樣。 在應用程式或框架視窗物件的成員函式中建立記錄集。

另請參閱

MFC 資料庫類別