TN055: migrowanie aplikacji klas baz danych MFC ODBC do klas MFC DAO
[!UWAGA]
Począwszy od programu Visual C++ .NET środowiska Visual C++ i kreatorów już obsługiwać DAO (choć znajdują się klasy DAO i nadal można używać).Firma Microsoft zaleca użycie Szablonów OLE DB lub ODBC i MFC dla nowych projektów.W utrzymaniu istniejących aplikacji należy używać tylko obiektów DAO.
Omówienie
W wielu sytuacjach może być pożądane migrację aplikacji korzystających z klasami baz danych MFC ODBC do klasami baz danych MFC obiektów DAO.Ta uwaga techniczna będzie szczegółowo większość różnic między klas MFC ODBC i obiektów DAO.Z różnic w uwadze nie należy zbyt trudne do migracji aplikacji z klas ODBC do klas MFC, w razie potrzeby.
Dlaczego migrację z ODBC DAO?
Istnieje kilka powodów dlaczego warto migracji aplikacji z klasami baz danych ODBC do klas bazy danych DAO, ale decyzji nie jest koniecznie proste lub oczywiste.Jedno należy pamiętać jest że aparat bazy danych Microsoft Jet, używanego przez DAO można przeczytać dowolne źródło danych ODBC, do którego masz sterownik ODBC.Może być bardziej efektywne użycie klasy bazy danych ODBC lub wywołanie ODBC bezpośrednio na sobie, ale aparat bazy danych Microsoft Jet może odczytywać dane ODBC.
Niektóre proste przypadki, które ułatwiają decyzji ODBC/DAO.Na przykład, kiedy wystarczy tylko dostęp do danych w formacie, który aparat Microsoft Jet można odczytać bezpośrednio (format programu Access, format programu Excel i tak dalej) oczywistym wyborem jest użycie klasy bazy danych DAO.
Bardziej złożonych przypadkach powstają, gdy dane istnieje na serwerze lub na wielu różnych serwerów.W tym przypadku decyzja o wykorzystaniu bazy danych ODBC klasy lub klas bazy danych DAO jest trudne.Jeśli chcesz wykonać czynności jak heterogenicznych sprzężenia (łączenie danych z serwerów w wielu formatach, takich jak SQL Server i Oracle), aparat bazy danych Microsoft Jet będzie wykonywać łączyć dla użytkownik, a nie zmusza użytkowników do pracy niezbędne jeśli używany klasami baz danych ODBC lub bezpośrednio o nazwie ODBC.Jeśli używasz sterownika ODBC, obsługującego sterownik kursory, najlepszym rozwiązaniem może być klasami baz danych ODBC.
Wybór może być skomplikowany, więc należy wpisać jakiś kod próbki do testowania wydajności różnych metod, biorąc pod uwagę szczególne potrzeby.Ta uwaga techniczna zakłada dokonały decyzji do migracji z klasami baz danych ODBC do klas bazy danych DAO.
Podobieństwa między klasami baz danych ODBC i klasami baz danych MFC DAO
Oryginalny projekt klas MFC ODBC oparto na modelu obiektów DAO, które były używane w programie Microsoft Access i Microsoft Visual Basic.Oznacza to, że istnieje wiele typowych funkcji ODBC i DAO MFC klasy, które nie wszystkie znajdują się w tej sekcji.Ogólnie rzecz biorąc modele programowania są takie same.
Aby podświetlić kilka podobieństw:
Zarówno ODBC DAO mają i obiektów bazy danych, które są zarządzane przy użyciu podstawowej systemu zarządzania bazami (danych DBMS).
Obie mają obiekty recordset reprezentujących zestaw wyników zwróconych z tego systemu DBMS.
Obiekty bazy danych i zestawu rekordów DAO mają prawie identyczne z klas ODBC członków.
Z obu zestawów klas kodu do pobierania danych jest identyczne, z wyjątkiem niektórych zmiany nazwy obiektu i elementu członkowskiego.Zmiany będą wymagane, ale zazwyczaj proces jest zmiana nazwy proste podczas przełączania z klas ODBC do klas obiektów DAO.
Na przykład w obu modelach procedury do pobierania danych jest do tworzenia i otwórz obiekt bazy danych, tworzenie i otwiera obiekt recordset i poruszać (Przenieś) danych wykonywania niektórych operacji.
Różnice między ODBC i klas DAO MFC
Klasy DAO zawierać więcej obiektów i bogatszy zestaw metod, ale tylko w tej sekcji szczegółowo różnice w podobnych klasy i funkcje.
Prawdopodobnie najbardziej oczywiste różnice między klasami są zmiany nazwy dla podobnych klas i funkcje globalne.Na poniższej liście przedstawiono zmiany nazw obiektów, metod i globalne funkcje skojarzone z klasami baz danych:
Klasa lub funkcja |
Odpowiednik klas 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-oparty) |
RFX_Text |
DFX_Text |
RFX_Binary |
DFX_Binary |
RFX_LongBinary |
DFX_LongBinary |
* RFX_Date Funkcja opiera się na CTime i TIMESTAMP_STRUCT.
Zasadnicze zmiany funkcjonalne, które mogą wpływać na aplikacji i wymagają więcej niż prosta nazwa zmian są wymienione poniżej.
Stałe i makra używane do określania typu Otwórz rzeczy, jak zestaw rekordów i zestawu rekordów, otwórz aplet Opcje zostały zmienione.
Z ODBC klas MFC niezbędnych do określenia tych opcji za pomocą makra lub typy wyliczane.
W przypadku klas obiektów DAO DAO zawiera definicję tych opcji w pliku nagłówka (DBDAOINT.H).Tak więc typ zestawu rekordów jest wyliczany członkiem CRecordset, ale z obiektów DAO to stała, zamiast.Na przykład można użyć Migawka podczas określania typu CRecordset ODBC, ale DB_OPEN_SNAPSHOT podczas określania typu CDaoRecordset.
Domyślny typ zestawu rekordów dla CRecordset jest Migawka podczas domyślny typ zestawu rekordów dla CDaoRecordset jest dynamiczny (patrz uwaga poniżej dla dodatkowych kwestii dotyczących migawek klasy ODBC).
ODBC CRecordset klasa ma możliwość, aby utworzyć typ rekordów.W CDaoRecordset klasa, tylko przesyłanie dalej nie jest typ zestawu rekordów, ale raczej właściwości (lub option) niektórych rodzajów zestawów rekordów.
Dołączanie rekordów podczas otwierania CRecordset obiektu oznaczało, że zestawu rekordów danych może odczytywać i dołączane.Z CDaoRecordset obiektów, opcja unikatowym dosłownie oznacza, że dane w zestawie rekordów może być tylko dołączane (a nie czyta).
Funkcje składowe transakcji do klas ODBC są członkami CDatabase i działać na poziomie bazy danych.W klasach obiektów DAO, funkcje składowe transakcji są członkami wyższej klasy poziomu (CDaoWorkspace) i tym samym może mieć wpływ wiele CDaoDatabase obiekty udostępniania tym samym obszarze roboczym (miejsce transakcji).
Klasa wyjątków został zmieniony.CDBExceptions są wyrzucane do klas ODBC i CDaoExceptions do klas obiektów DAO.
RFX_Dateużywa CTime i TIMESTAMP_STRUCT obiekty podczas DFX_Date korzysta z COleDateTime.COleDateTime Jest prawie identyczna z CTime, ale opiera się na OLE 8-bajtowa Data zamiast 4-bajtowe time_t , może on przechowywać o wiele większy zakres danych.
[!UWAGA]
DAO (CDaoRecordset) migawki są tylko do odczytu podczas ODBC (CRecordset) migawki mogą być można aktualizować w zależności od sterownika i stosowania Biblioteka kursorów ODBC.Jeśli używasz Biblioteka kursorów, CRecordset migawki są aktualizowalne.Jeśli używasz żadnych sterowników firmy Microsoft z Desktop Driver Pack 3.0 bez Biblioteka kursorów ODBC, CRecordset migawki są tylko do odczytu.Jeśli używasz innego sterownika, sprawdź dokumentację kierowcy, aby sprawdzić, czy migawki (STATIC_CURSORS) są tylko do odczytu.