TN055: Přenesení aplikace třídy MFC ODBC databáze tříd MFC DAO
[!POZNÁMKA]
Tak jako jazyk Visual C++ .NET, tak taky prostředí a průvodci jazyka Visual C++ nepodporují rozhraní DAO (přestože třídy rozhraní DAO jsou zahrnuty a lze je stále použít).Společnost Microsoft doporučuje použít OLE DB šablony nebo ODBC a MFC pro nové projekty.Měli by jste používat pouze rozhraní DAO pro údržbu existujících aplikací.
Přehled
V mnoha situacích může být žádoucí migraci aplikací, které používají databáze tříd MFC's ODBC třídami databází MFC's DAO.Tato technická Poznámka bude podrobně většina rozdílů mezi tříd MFC ODBC a DAO.S rozdíly v úvahu by nemělo být příliš obtížné přenést aplikací ze třídy ODBC tříd MFC podle potřeby.
Proč přenést ODBC do DAO?
Existuje několik důvodů, proč chcete přenést ze třídy databáze ODBC databáze třídy DAO aplikací, ale rozhodnutí není nutně jednoduché nebo zřejmé.Mějte jedna věc je, že databázový stroj Microsoft Jet používá DAO můžete číst libovolný zdroj dat ODBC, pro který máte ovladač ODBC.Může být efektivnější použít třídy databáze ODBC nebo volání ODBC přímo sami, ale databázový stroj Microsoft Jet může číst ODBC data.
Některé jednoduché případy, které umožňují snadnou rozhodnutí ODBC nebo DAO.Například když je třeba pouze přístup k datům ve formátu, který stroj Microsoft Jet může číst přímo (formát aplikace Access, Excel formát a podobně) zřejmé voleb je použití třídy DAO databáze.
Složitějších případech vzniknout dat existuje na serveru nebo na řadu různých serverů.V případě rozhodnutí o použití třídy databáze ODBC nebo třídy DAO databáze je obtížné.Pokud chcete provádět činnosti, jako heterogenní spojení (join data ze serverů ve více formátech, jako je SQL Server a Oracle) a databázový stroj Microsoft Jet bude provádět spojení můžete namísto nebudete postupovat práce nezbytné použity třídami databází ODBC nebo ODBC volán přímo.Pokud používáte ovladač ODBC, který podporuje ovladač kurzory, pravděpodobně nejlepší volba třídy databáze ODBC.
Volba může být složité, tak, že chcete zapsat ukázkový kód při testování výkonu dané zvláštní potřeby různých metod.Tato technická Poznámka předpokládá provedení rozhodnutí přenést z třídy databáze ODBC, DAO databáze tříd.
Podobnost mezi třídami databází ODBC a třídami databází MFC DAO
Původní návrh tříd MFC ODBC byla založena na modelu objektu DAO, který byl použit v aplikaci Microsoft Access a Microsoft Visual Basic.To znamená, že jsou společné mnoha funkcí ODBC a DAO MFC třídy, které bude všechny uvedena v této části.Modely programování obecně jsou stejné.
Zvýrazněte několik podobnost:
Jak ODBC, DAO třídy mají databázových objektů, které spravují pomocí základního systému správy databáze (DBMS).
Mají oba objekty recordset představuje sadu výsledků vrácených z tohoto systému DBMS.
Objekty databáze a záznamů DAO mají členové třídy ODBC téměř totožné.
Obě sady tříd je kód, který chcete načíst data identické, kromě některé změny názvu objektu a člen.Změny budou požadovány, ale obvykle proces při přepnutí z třídy ODBC, DAO tříd je jednoduchý název změnit.
Například v obou modelech postup načítání dat je vytvoření a otevření databázového objektu, vytvoření a otevření objektu recordset a procházet (přesunout) data provedení operace.
Rozdíly mezi ODBC a tříd DAO MFC
Třídy DAO zahrnují další objekty a rozsáhlejší sadu metod, ale v této části bude podrobně pouze rozdíly v podobných tříd a funkce.
Pravděpodobně jsou nejobvyklejší rozdíly mezi třídami změny názvů tříd podobné a globální funkce.Následující seznam uvádí změny názvů objektů, metod a globální funkce spojené s třídami databází:
Třída nebo funkce |
Ekvivalentní tříd 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 * |
DFX_Date (COleDateTime-založena) |
RFX_Text |
DFX_Text |
RFX_Binary |
DFX_Binary |
RFX_LongBinary |
DFX_LongBinary |
* Na RFX_Date funkce je založena na CTime a TIMESTAMP_STRUCT.
Hlavní změny funkcí, které mohou ovlivnit aplikace a vyžadují více než jednoduchý název změny jsou uvedeny níže.
Konstanty a maker používá k určení záznamů jako otevřete typ a recordset možnosti byly změněny.
ODBC tříd MFC potřebné k definování těchto možností prostřednictvím makra nebo s typy ve výčtu.
Třídy DAO DAO obsahuje definici těchto možností v záhlaví souboru (DBDAOINT.H).Typ sady záznamů je tedy ve výčtu člen CRecordset, ale s DAO místo je konstanta.Například použijete snímek při určování typu CRecordset v rozhraní ODBC, ale DB_OPEN_SNAPSHOT při určování typu CDaoRecordset.
Výchozí typ sady záznamů pro CRecordset je snímek při výchozí typ sady záznamů pro CDaoRecordset je dynaset (viz poznámka níže pro další problém o snímcích třídy ODBC).
ODBC CRecordset třída má možnost vytvořit typ sady záznamů pouze pro předávání.V CDaoRecordset třídy pouze pro předávání není typ sady záznamů, ale spíše vlastnosti (nebo možnost) určitých typů sad záznamů.
Přidávání záznamů při otevírání CRecordset objektu znamenalo, že datové sadě záznamů nelze číst a připojena.S CDaoRecordset objektu doslova znamená možnost jen připojit pouze lze data sadě záznamů připojeny (a číst).
Funkce členů do tříd ODBC transakce jsou členy CDatabase a působit na úrovni databáze.Třídy DAO funkce členů transakce jsou členy třídy vyšší úrovně (CDaoWorkspace) a tedy může ovlivnit více CDaoDatabase objekty sdílení stejného prostoru (místo transakce).
Třída výjimek byl změněn.CDBExceptions vyvolaných tříd ODBC a CDaoExceptions třídy DAO.
RFX_Datepoužívá CTime a TIMESTAMP_STRUCT objekty při DFX_Date používá COleDateTime.COleDateTime Je téměř shodné s CTime, ale je založen na 8 bajtů OLE datum místo-4bajtová time_t tak mnohem větší rozsah dat může uchovávat.
[!POZNÁMKA]
DAO (CDaoRecordset) snímky jsou jen pro čtení při ODBC (CRecordset) může být v závislosti na ovladače a Knihovna kurzorů ODBC používat aktualizovatelný snímky.Používáte-li Knihovna kurzorů CRecordset snímky jsou aktualizovatelný.Pokud používáte některou z Desktop Driver Pack 3.0 ovladače Microsoft bez Knihovna kurzorů ODBC CRecordset snímky jsou jen pro čtení.Pokud používáte jiný ovladač, dokumentaci řidiče zda snímky (STATIC_CURSORS) jsou jen pro čtení.