共用方式為


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函式根據CTimeTIMESTAMP_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使用CTimeTIMESTAMP_STRUCT 物件時 DFX_Date 會使用COleDateTimeCOleDateTime與幾乎相同CTime,不過根據 8 位元 OLE 日期而不是 4 個位元組time_t ,它可以存放起來更大範圍的資料。

    注意事項注意事項

    DAO (CDaoRecordset) 快照集是唯讀的 ODBC 時 (CRecordset) 快照集可能是可更新的驅動程式及使用 ODBC 資料指標程式庫而定。如果您使用資料指標程式庫中, CRecordset快照集是可更新。如果您不使用 ODBC 資料指標程式庫中,使用任何 Microsoft 驅動程式,從桌面驅動程式套件 3.0 的CRecordset快照集是唯讀。如果您正在使用另一個驅動程式,請檢查驅動程式的說明文件,看看是否快照集 (STATIC_CURSORS) 是唯讀。

請參閱

其他資源

技術的備忘稿編號

依類別的技術注意事項