Sdílet prostřednictvím


TN055: Migrace aplikací databázové třídy MFC rozhraní ODBC do tříd MFC rozhraní DAO

Poznámka

DaO se používá s databázemi Accessu a podporuje se prostřednictvím Office 2013. DAO 3.6 je konečná verze a je považována za za zastaralou. Prostředí a průvodci Visual C++ nepodporují rozhraní DAO (i když jsou zahrnuty třídy DAO a můžete je stále používat). Společnost Microsoft doporučuje pro nové projekty používat šablony OLE DB nebo rozhraní ODBC a MFC . DaO byste měli používat jenom při údržbě existujících aplikací.

Přehled

V mnoha situacích může být žádoucí migrovat aplikace, které používají databázové třídy MFC ODBC do databázových tříd ROZHRANÍ MFC DAO. Tato technická poznámka podrobně podrobně rozebíná většinu rozdílů mezi třídami MFC ODBC a ROZHRANÍ DAO. S ohledem na rozdíly by nemělo být příliš obtížné migrovat aplikace z tříd ODBC do tříd MFC, pokud je to žádoucí.

Proč migrovat z rozhraní ODBC na DAO

Existuje řada důvodů, proč byste mohli chtít migrovat aplikace z databázových tříd ODBC do databázových tříd DAO, ale rozhodnutí není nutně jednoduché nebo zřejmé. Je třeba mít na paměti, že databázový stroj Microsoft Jet používaný rozhraním DAO může číst jakýkoli zdroj dat ODBC, pro který máte ovladač ODBC. Může být efektivnější používat databázové třídy ODBC nebo přímo volat ODBC, ale databázový stroj Microsoft Jet může číst data ODBC.

Některé jednoduché případy, které usnadňují rozhodování ROZHRANÍ ODBC/DAO. Pokud například potřebujete přístup k datům jenom ve formátu, který může modul Microsoft Jet číst přímo (formát Accessu, formát Excelu atd.), je zřejmé, že se používají databázové třídy DAO.

Složitější případy vznikají, když data existují na serveru nebo na různých serverech. V tomto případě je rozhodnutí o použití databázových tříd ODBC nebo databázových tříd DAO obtížné. Pokud chcete dělat věci, jako jsou heterogenní spojení (spojování dat ze serverů ve více formátech, jako je SQL Server a Oracle), databázový stroj Microsoft Jet provede spojení za vás, místo aby vás vynutí provést potřebnou práci v případě, že jste použili databázové třídy ODBC nebo volali rozhraní ODBC přímo. Pokud používáte ovladač ODBC, který podporuje kurzory ovladačů, může být nejlepší volbou třídy databáze ODBC.

Volba může být složitá, takže můžete chtít napsat ukázkový kód, který otestuje výkon různých metod vzhledem k vašim speciálním potřebám. Tato technická poznámka předpokládá, že jste se rozhodli migrovat z databázových tříd ODBC do databázových tříd DAO.

Podobnosti mezi databázovými třídami ODBC a databázovými třídami MFC DAO

Původní návrh tříd MFC ODBC byl založen na objektovém modelu DAO, který byl používán v aplikaci Microsoft Access a Microsoft Visual Basic. To znamená, že existuje mnoho běžných funkcí odbc a dao MFC tříd, které nebudou všechny uvedeny v této části. Obecně platí, že programovací modely jsou stejné.

Zvýraznění několika podobností:

  • Třídy ODBC i DAO mají databázové objekty, které se spravují pomocí základního systému pro správu databází (DBMS).

  • Oba mají objekty sady záznamů představující sadu výsledků vrácených z tohoto DBMS.

  • Objekty databáze a sady záznamů DAO mají členy téměř stejné jako třídy ODBC.

  • V obou sadách tříd je kód pro načtení dat shodný s výjimkou některých změn názvu objektu a člena. Změny budou vyžadovány, ale obvykle je proces jednoduchým změnou názvu při přechodu z tříd ODBC na třídy DAO.

Například v obou modelech je postup pro načtení dat vytvoření a otevření databázového objektu, vytvoření a otevření objektu sady záznamů a procházení (přesunutí), i když data provádějící nějakou operaci.

Rozdíly mezi třídami ODBC a JAZYKA MFC rozhraní DAO

Třídy DAO zahrnují více objektů a bohatší sadu metod, ale tato část podrobně popisuje pouze rozdíly v podobných třídách a funkcích.

Nejobjasnější rozdíly mezi třídami jsou změny názvů podobných tříd a globálních funkcí. Následující seznam ukazuje změny názvů objektů, metod a globálních funkcí přidružených k databázovým třídám:

Třída nebo funkce Ekvivalentní ve třídách 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_Date1 DFX_Date (COleDateTimena základě)
RFX_Text DFX_Text
RFX_Binary DFX_Binary
RFX_LongBinary DFX_LongBinary

1 Funkce RFX_Date je založena na CTime a TIMESTAMP_STRUCT.

Hlavní změny funkcí, které můžou ovlivnit vaši aplikaci a vyžadují více než jednoduché změny názvů, jsou uvedeny níže.

  • Konstanty a makra použitá k určení položek, jako je typ otevření sady záznamů a možnosti otevření sady záznamů, byly změněny.

    Pomocí tříd ODBC MFC potřebné k definování těchto možností prostřednictvím maker nebo výčtových typů.

    Pomocí tříd DAO daO poskytuje DAO definici těchto možností v souboru hlaviček (DBDAOINT. H). Proto je typ sady záznamů výčtem člen CRecordset, ale s DAO je to konstanta. Například byste použili snímek při zadávání typu CRecordset v rozhraní ODBC, ale DB_OPEN_SNAPSHOT při zadávání typu CDaoRecordset.

  • Výchozí typ CRecordset sady záznamů je snímek , zatímco výchozí typ sady záznamů pro CDaoRecordset je dynaset (další problém se snímky tříd ODBC najdete v následující poznámce).

  • Třída ODBC CRecordset má možnost vytvořit typ sady záznamů pouze pro předávání. CDaoRecordset Ve třídě není forward-only typ sady záznamů, ale spíše vlastnost (nebo možnost) určitých typů sad záznamů.

  • Sada záznamů jen pro připojení při otevření objektu CRecordset znamenala, že data sady záznamů lze číst a připojovat. U CDaoRecordset objektu možnost pouze připojení znamená doslova, že data sady záznamů lze připojit pouze (a ne číst).

  • Členské funkce transakcí třídy ODBC jsou členy CDatabase a fungují na úrovni databáze. Ve třídách DAO jsou členské funkce transakce členy vyšší úrovně třídy (CDaoWorkspace), a proto mohou mít vliv na více CDaoDatabase objektů sdílejících stejný pracovní prostor (transakční prostor).

  • Třída výjimky byla změněna. CDBExceptions jsou vyvolán v odbc třídy a CDaoExceptions v DAO třídy.

  • RFX_Date používá CTime a TIMESTAMP_STRUCT objekty při DFX_Date použití COleDateTime. Je COleDateTime téměř identický CTime, ale je založen na 8bajtů OLE DATE místo 4 bajtového time_t , takže může obsahovat mnohem větší rozsah dat.

    Poznámka

    Snímky DAO (CDaoRecordset) jsou jen pro čtení, zatímco snímky ODBC (CRecordset) můžou být aktualizovatelné v závislosti na ovladači a použití knihovny kurzorů ODBC. Pokud používáte knihovnu kurzorů, CRecordset snímky se dají aktualizovat. Pokud používáte některý z ovladačů Microsoftu z Desktop Driver Pack 3.0 bez knihovny kurzorů ODBC, CRecordset snímky jsou jen pro čtení. Pokud používáte jiný ovladač, zkontrolujte v dokumentaci k ovladači, jestli jsou snímky (STATIC_CURSORS) jen pro čtení.

Viz také

Technické poznámky podle čísel
Technické poznámky podle kategorií