MFC:使用不具文件和檢視的資料庫類別
有時候,您可能不想在資料庫應用程式中使用架構的檔/檢視架構。 本主題將說明:
應用程式精靈選項可支援沒有串行化的應用程式,以及沒有檔相關的 [檔案] 功能表命令,例如 [新增]、[開啟]、[儲存] 和 [另存新檔]。
如何使用使用最少文件的應用程式。
如何建構沒有檔或檢視的應用程式。
當您不需要檔時
某些應用程式具有檔的不同概念。 這些應用程式通常會使用 [檔案開啟 ] 命令,將所有或大部分的檔案從記憶體載入記憶體。 他們會使用 [檔案儲存 ] 或 [另存新 檔] 命令,一次將所有更新的檔案寫回記憶體。 使用者看到的內容是數據檔。
不過,某些類別的應用程式不需要檔。 資料庫應用程式會以交易方式運作。 應用程式會從資料庫選取記錄,並將其呈現給使用者,通常是一次一筆記錄。 使用者看到的通常是單一當前記錄,這可能是記憶體中唯一的記錄。
如果您的應用程式不需要檔案來儲存資料,您可以免除部分或所有架構的檔/檢視架構。 您省下多少取決於您偏好的方法。 您可以:
使用最少的檔作為儲存數據源連線的位置,但免除一般檔功能,例如串行化。 當您想要數個數據檢視並想要同步處理所有檢視、一次更新這些檢視等等時,這非常有用。
使用您直接繪製的框架視窗,而不是使用檢視。 在此情況下,您會省略檔,並將任何數據或數據連線儲存在框架窗口物件中。
檔和檢視的應用程式精靈選項
MFC 應用程式精靈在 [選取資料庫支援] 中有數個選項,如下表所列。 如果您使用 MFC 應用程式精靈來建立應用程式,所有這些選項都會產生具有檔和檢視的應用程式。 某些選項提供省略不必要的檔功能的文件和檢視。 如需詳細資訊,請參閱 資料庫支援、MFC 應用程式精靈。
選項 | 檢視 | Document |
---|---|---|
None | 衍生自 CView 。 |
沒有資料庫支援。 這是預設選項。 如果您在 [應用程式類型]、[MFC 應用程式精靈] 頁面上選取 [檔案/檢視架構支援] 選項,您會在 [檔案] 功能表上取得完整的文件支援,包括串行化和 [新增]、[開啟]、[儲存] 和 [另存新檔] 命令。 請參閱 沒有檔案的應用程式。 |
僅限頭檔 | 衍生自 CView 。 |
提供應用程式的基本資料庫支援層級。 包含 Afxdb.h。 新增連結庫,但不會建立任何資料庫特定的類別。 您可以稍後建立記錄集,並使用它們來檢查和更新記錄。 |
沒有檔案支持的資料庫檢視 | 來自 CRecordView |
提供文件支援,但沒有串行化支援。 檔可以儲存記錄集並協調多個檢視;不支援串行化或 [新增]、 [開啟]、 [儲存] 和 [ 另存新檔 ] 命令。 請參閱 具有最少檔案的應用程式。 如果您包含資料庫檢視,則必須指定數據源。 包含資料庫頭檔、連結庫、記錄檢視和記錄集。 (僅適用於具有 的應用程式在 [應用程式類型]、[MFC 應用程式精靈] 頁面上選取的檔/檢視架構支援選項。 |
具有檔案支持的資料庫檢視 | 來自 CRecordView |
提供完整的文件支援,包括串行化和檔相關的 [檔案 ] 功能表命令。 資料庫應用程式通常會以每筆記錄為基礎運作,而不是以個別檔案為基礎運作,因此不需要串行化。 不過,您可能有串行化的特殊用途。 請參閱 具有最少檔案的應用程式。 如果您包含資料庫檢視,則必須指定數據源。 包含資料庫頭檔、連結庫、記錄檢視和記錄集。 (僅適用於具有 的應用程式在 [應用程式類型]、[MFC 應用程式精靈] 頁面上選取的檔/檢視架構支援選項。 |
如需串行化替代專案和串行化替代用法的討論,請參閱 串行化:串行化與資料庫輸入/輸出。
具有最少檔案的應用程式
MFC 應用程式精靈有兩個選項可支援表單型資料存取應用程式。 每個選項都會 CRecordView
建立衍生的檢視類別和檔。 它們與排除在文件中的內容不同。
沒有檔案支持的檔
如果您不需要檔串行化,請選取 [應用程式精靈資料庫] 選項 [資料庫檢視],而不需支援 檔案。 檔提供下列實用用途:
這是儲存物件的便利位置
CRecordset
。此使用方式會平行處理一般檔概念:檔會儲存數據(或在此案例中是一組記錄),而檢視則是檔的檢視。
如果您的應用程式呈現多個檢視(例如多個記錄檢視),則檔支援協調檢視。
如果多個檢視顯示相同的數據,您可以在任何檢視變更數據時,使用
CDocument::UpdateAllViews
成員函式來協調所有檢視的更新。
您通常會針對簡單的表單型應用程式使用此選項。 應用程式精靈會自動支援這類應用程式的便利結構。
具有檔案支持的檔
當您有檔案相關檔案功能表命令和檔案串行化的替代用法時,請選取應用程式精靈資料庫選項 [資料庫檢視與檔案支援]。 針對程式的數據存取部分,您可以使用與文件沒有檔案支援中所述的相同方式使用檔。 例如,您可以使用檔的串行化功能來讀取和寫入儲存使用者喜好設定或其他實用資訊的串行化使用者配置檔檔。 如需詳細資訊,請參閱 串行化:串行化與資料庫輸入/輸出。
應用程式精靈支援此選項,但您必須撰寫串行化檔的程序代碼。 將串行化資訊儲存在文件數據成員中。
沒有檔案的應用程式
您有時可能會想要撰寫不使用檔或檢視的應用程式。 如果沒有檔案,您可以將您的資料(例如 CRecordset
物件)儲存在框架視窗類別或應用程式類別中。 任何其他需求取決於應用程式是否呈現使用者介面。
使用者介面的資料庫支援
如果您有使用者介面(例如控制台命令行介面以外),您的應用程式會直接繪製到框架視窗的工作區,而不是繪製到檢視中。 這類應用程式不會針對其主要使用者介面使用 CRecordView
、 CFormView
或 CDialog
,但通常會 CDialog
用於一般對話。
撰寫沒有檔案的應用程式
因為應用程式精靈不支援在沒有文件的情況下建立應用程式,因此您必須撰寫自己的 CWinApp
衍生類別,並視需要建立 CFrameWnd
或 CMDIFrameWnd
類別。 覆寫 CWinApp::InitInstance
並宣告應用程式物件為:
CYourNameApp theApp;
架構仍然提供訊息對應機制和其他許多功能。
資料庫支援與使用者介面分開
某些應用程式不需要使用者介面,或只需要最少的用戶介面。 例如,假設您正在撰寫:
其他應用程式(用戶端)呼叫的中繼數據存取物件,用於在應用程式與數據源之間特殊處理數據。
在不進行使用者介入的情況下處理數據的應用程式,例如將數據從某個資料庫格式移至另一個或執行批次更新的應用程式。
因為沒有檔案擁有 CRecordset
物件,所以您可能想要將它儲存為衍生應用程式類別中的 CWinApp
內嵌資料成員。 替代方案包括:
完全不保留永久
CRecordset
物件。 您可以將 NULL 傳遞至記錄集類別建構函式。 在此情況下,架構會使用記錄集GetDefaultConnect
成員函式中的資訊來建立暫存CDatabase
物件。 這是最有可能的替代方法。將
CRecordset
物件設為全域變數。 此變數應該是您在覆寫中CWinApp::InitInstance
動態建立之記錄集物件的指標。 這可避免在初始化架構之前嘗試建構 物件。使用記錄集物件,就像在檔或檢視的內容中一樣。 在應用程式或框架視窗對象的成員函式中建立記錄集。