TN055: 移轉 MFC ODBC 資料庫類別應用程式,MFC DAO 類別,
注意事項 |
---|
從 Visual C++ .NET 開始,Visual C++ 環境和精靈不再支援 DAO (但該版本中仍包含 DAO 類別,您仍然可以使用這些類別)。Microsoft 建議您採用 OLE DB 樣板 或 ODBC 和 MFC 的新專案。請在維護現有應用程式時再使用 DAO。 |
概觀
在許多情況下可能會令人滿意,將使用 MFC 的 ODBC 資料庫類別,以 MFC DAO 資料庫類別的應用程式移轉。這份技術提示將詳細說明大多數的 MFC ODBC 和 DAO 類別之間的差異。有一點不同,不應該過於困難而無法移轉應用程式從 ODBC 類別,MFC 類別,如有需要。
為什麼要遷移從 ODBC dao?
有幾個原因為何您可能想將 ODBC 資料庫類別中的應用程式移轉至 DAO 資料庫類別中,但是決定不一定是簡單明顯。要牢記在心的一件事是 DAO 由 Microsoft Jet 資料庫引擎可以讀取您擁有 ODBC 驅動程式的任何 ODBC 資料來源。可能是使用 ODBC 資料庫類別就是您自己,但 Microsoft Jet 資料庫引擎可以讀取 ODBC 資料直接呼叫 ODBC 更有效率。
一些簡單的情況下,可以很容易 ODBC/DAO 決策。舉個例說,當您只需要一種格式,Microsoft Jet 引擎可以讀取直接 (Access 格式,在 Excel 的格式,以及等等) 的理所當然的選擇是使用 DAO 資料庫類別中資料的存取權。
當您的資料存在於伺服器上或在各種不同的伺服器上,就會發生更複雜的情況。在此情況下,決定来使用 ODBC 資料庫類別或 DAO 資料庫類別很困難。如果您想要做一些事,像是異質聯結 (從伺服器取得 SQL Server 和 Oracle 等多種格式的聯結資料),然後再 Microsoft Jet 資料庫引擎會執行,則不是強迫您進行所需的工作,如果您使用 ODBC 資料庫類別,或直接呼叫 ODBC 的連結。如果您正在使用 ODBC 驅動程式支援的驅動程式的資料指標,最佳的選擇可能是 ODBC 資料庫類別。
選擇可能很複雜,,所以您可能想要撰寫一些範例程式碼,來測試效能,提供您的特殊需求的各種方法。這份技術提示會假設您所做的決策,從 [ODBC 資料庫類別考慮移轉至 DAO 資料庫類別。
ODBC 資料庫類別和 MFC DAO 資料庫類別之間的相似之處
MFC ODBC 類別的原始設計為基礎的 DAO 物件模型已在使用中 Microsoft Access 然後 Microsoft Visual Basic。這表示為 ODBC] 和 [DAO MFC 類別,它們不是所有會列在本章節中的許多常用的功能。一般情況下,程式撰寫模型都是一樣的。
若要反白顯示幾個相似之處:
將 [ODBC] 與 [DAO 類別會有使用基本的資料庫管理系統 (DBMS) 管理的資料庫物件。
兩者都具有代表該 DBMS 所傳回的結果集的資料錄集物件。
DAO 資料庫和資料錄集物件有幾乎等於 ODBC 類別的成員。
這兩組類別,用來擷取資料的程式碼除了都完全相同有些物件和成員的名稱變更。變更將會在必要的但當從 ODBC 類別切換到 DAO 類別處理程序通常是簡單的名稱變更。
比方說,在這兩個模型中擷取資料的程序是建立及開啟資料庫物件、 建立及開啟資料錄集物件,並巡覽 (移動) 進行作業的資料。
ODBC 和 DAO MFC 類別之間的差異
DAO 類別包含更多的物件和更豐富的一組方法,但本節只將詳細說明中類似的類別和新功能的差異。
可能的類別之間最明顯的差異是相似的類別和全域函式的名稱變更。下列清單顯示的名稱變更的物件、 方法和資料庫類別相關聯的全域函式:
類別或函式 |
在 [MFC DAO 類別的對等用法 |
---|---|
CDatabase |
CDaoDatabase |
CDatabase::ExecuteSQL |
CDaoDatabase::Execute |
CRecordset |
CDaoRecordset |
CRecordset::GetDefaultConnect |
CDaoRecordset::GetDefaultDBName |
CFieldExchange |
CDaoFieldExchange |
RFX_Bool |
DFX_Bool |
RFX_Byte |
DFX_Byte |
RFX_Int |
DFX_Short |
RFX_Long |
DFX_Long |
|
DFX_Currency |
RFX_Single |
DFX_Single |
RFX_Double |
DFX_Double |
RFX_Date 1 |
DFX_Date (COleDateTime為基礎) |
RFX_Text |
DFX_Text |
RFX_Binary |
DFX_Binary |
RFX_LongBinary |
DFX_LongBinary |
1 RFX_Date函式根據CTime和 TIMESTAMP_STRUCT。
主要功能的變更可能會影響您的應用程式,並需要多個簡單名稱的變更如下所示。
常數和巨集,用來指定之類的資料錄集開啟型別,並開啟 [選項] 的資料錄集已經變更。
MFC ODBC 類別來定義這些選項,透過巨集所需或列舉型別。
DAO 類別中,DAO 提供定義這些選項,以標頭檔 (DBDAOINT。H) 中。因此資料錄集型別是列舉的成員的CRecordset,而使用 DAO 它是一個常數。比方說,您可使用快照集指定的型別時CRecordset在 ODBC 裡,但 DB_OPEN_SNAPSHOT 指定的型別時CDaoRecordset。
預設資料錄集類型CRecordset是快照集的預設資料錄集類型,而CDaoRecordset是的動態集中 (請參閱以下注意事項,關於 ODBC 類別快照的其他問題)。
ODBC CRecordset類別有一個選項來建立順向類型資料錄集的型別。在CDaoRecordset類別,順向類型不是資料錄集型別,但而是屬性 (或選項) 的特定類型的資料錄集。
一個記錄僅附加集開啟時CRecordset物件是可讀取資料錄集的資料,並附加。與CDaoRecordset物件時,[僅新增] 選項解譯為常值表示資料錄集的資料可能只是附加 (和讀取)。
ODBC 類別的交易成員函式屬於CDatabase及運用在資料庫層級。在 DAO 類別,交易成員函式都是較高的層級類別的成員 (CDaoWorkspace),因此可能會影響多個CDaoDatabase共用同一個工作區 (交易空間) 的物件。
已變更的例外狀況類別。CDBExceptions ODBC 類別中擲回和 CDaoExceptions 在 DAO 類別。
RFX_Date使用CTime和 TIMESTAMP_STRUCT 物件時 DFX_Date 會使用COleDateTime。COleDateTime與幾乎相同CTime,不過根據 8 位元 OLE 日期而不是 4 個位元組time_t ,它可以存放起來更大範圍的資料。
注意事項 DAO (CDaoRecordset) 快照集是唯讀的 ODBC 時 (CRecordset) 快照集可能是可更新的驅動程式及使用 ODBC 資料指標程式庫而定。如果您使用資料指標程式庫中, CRecordset快照集是可更新。如果您不使用 ODBC 資料指標程式庫中,使用任何 Microsoft 驅動程式,從桌面驅動程式套件 3.0 的CRecordset快照集是唯讀。如果您正在使用另一個驅動程式,請檢查驅動程式的說明文件,看看是否快照集 (STATIC_CURSORS) 是唯讀。