TN055: migrowanie aplikacji klas baz danych MFC ODBC do klas MFC DAO

Uwaga

DaO jest używany z bazami danych programu Access i jest obsługiwany za pośrednictwem pakietu Office 2013. DaO 3.6 jest wersją ostateczną i jest uważany za przestarzałą. Środowisko i kreatory języka Visual C++ nie obsługują dao (chociaż klasy DAO są uwzględnione i nadal można ich używać). Firma Microsoft zaleca używanie szablonów OLE DB lub ODBC i MFC dla nowych projektów. W przypadku obsługi istniejących aplikacji należy używać tylko dao.

Omówienie

W wielu sytuacjach może być pożądane migrowanie aplikacji korzystających z klas baz danych ODBC MFC do klas baz danych DAO MFC. Ta uwaga techniczna szczegółowo opisuje większość różnic między klasami MFC ODBC i DAO. Mając na uwadze różnice, nie należy zbyt trudno migrować aplikacje z klas ODBC do klas MFC w razie potrzeby.

Dlaczego warto przeprowadzić migrację z ODBC do DAO

Istnieje wiele powodów, dla których warto migrować aplikacje z klas baz danych ODBC do klas baz danych DAO, ale decyzja nie musi być prosta ani oczywista. Należy pamiętać, że aparat bazy danych Microsoft Jet używany przez DAO może odczytywać dowolne źródło danych ODBC, dla którego masz sterownik ODBC. Bardziej wydajne może być użycie klas baz danych ODBC lub wywołanie odBC bezpośrednio, ale aparat bazy danych Microsoft Jet może odczytywać dane ODBC.

Niektóre proste przypadki, które sprawiają, że decyzja ODBC/DAO jest łatwa. Jeśli na przykład potrzebujesz tylko dostępu do danych w formacie, który aparat Microsoft Jet może odczytać bezpośrednio (format programu Access, format programu Excel itd.), oczywistym wyborem jest użycie klas bazy danych DAO.

Bardziej złożone przypadki występują, gdy dane istnieją na serwerze lub na różnych serwerach. W takim przypadku decyzja o użyciu klas bazy danych ODBC lub klas bazy danych DAO jest trudna. Jeśli chcesz wykonywać takie czynności, jak sprzężenia heterogeniczne (sprzężenia danych z serwerów w wielu formatach, takich jak SQL Server i Oracle), aparat bazy danych Microsoft Jet wykona sprzężenie dla Ciebie, zamiast wymuszać wykonywanie pracy niezbędnej w przypadku użycia klas baz danych ODBC lub bezpośredniego wywołania ODBC. Jeśli używasz sterownika ODBC obsługującego kursory sterowników, najlepszym wyborem mogą być klasy bazy danych ODBC.

Wybór może być skomplikowany, dlatego warto napisać przykładowy kod w celu przetestowania wydajności różnych metod, biorąc pod uwagę specjalne potrzeby. Ta uwaga techniczna zakłada, że podjęto decyzję o migracji z klas 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 był oparty na modelu obiektów DAO, który był używany w programie Microsoft Access i Microsoft Visual Basic. Oznacza to, że istnieje wiele typowych funkcji klas ODBC i DAO MFC, które nie zostaną wymienione w tej sekcji. Ogólnie rzecz biorąc, modele programowania są takie same.

Aby wyróżnić kilka podobieństw:

  • Klasy ODBC i DAO mają obiekty bazy danych, które zarządzają przy użyciu bazowego systemu zarządzania bazami danych (DBMS).

  • Oba mają obiekty zestawu rekordów reprezentujące zestaw wyników zwróconych z tego systemu DBMS.

  • Obiekty bazy danych i zestawów rekordów dao mają elementy członkowskie niemal identyczne z klasami ODBC.

  • W przypadku obu zestawów klas kod pobierania danych jest identyczny, z wyjątkiem niektórych zmian nazw obiektów i składowych. Zmiany będą wymagane, ale zwykle proces jest prostą zmianą nazwy podczas przełączania z klas ODBC do klas DAO.

Na przykład w obu modelach procedura pobierania danych polega na utworzeniu i otwarciu obiektu bazy danych, utworzeniu i otwarciu obiektu zestawu rekordów, a następnie nawigowaniu (przenoszenie) danych wykonujących jakąś operację.

Różnice między klasami ODBC i DAO MFC

Klasy DAO zawierają więcej obiektów i bogatszy zestaw metod, ale ta sekcja zawiera tylko szczegółowe informacje o różnicach w podobnych klasach i funkcjach.

Prawdopodobnie najbardziej oczywiste różnice między klasami to zmiany nazw podobnych klas i funkcji globalnych. Na poniższej liście przedstawiono zmiany nazw obiektów, metod i funkcji globalnych skojarzonych z klasami baz danych:

Klasa lub funkcja Odpowiednik w klasach 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 (COleDateTimeoparte)
RFX_Text DFX_Text
RFX_Binary DFX_Binary
RFX_LongBinary DFX_LongBinary

1 Funkcja RFX_Date jest oparta na elementach CTime i TIMESTAMP_STRUCT.

Poniżej wymieniono główne zmiany funkcji, które mogą mieć wpływ na aplikację i wymagają więcej niż prostych zmian nazw.

  • Stałe i makra używane do określania elementów, takich jak typ otwierania zestawu rekordów i opcje otwierania zestawu rekordów, zostały zmienione.

    W przypadku klas ODBC MFC potrzebnych do zdefiniowania tych opcji za pomocą makr lub wyliczonych typów.

    W przypadku klas DAO dao udostępnia definicję tych opcji w pliku nagłówkowym (DBDAOINT). H). W związku z tym typ zestawu rekordów jest wyliczonym elementem członkowskim CRecordset, ale w przypadku daO jest to stała. Można na przykład użyć migawki podczas określania typu CRecordset odBC, ale DB_OPEN_SNAPSHOT podczas określania CDaoRecordsettypu .

  • Domyślny typ CRecordset zestawu rekordów dla parametru to migawka , podczas gdy domyślny typ zestawu rekordów dla CDaoRecordset elementu to dynaset (zobacz poniższą notatkę, aby uzyskać dodatkowy problem dotyczący migawek klas ODBC).

  • Klasa ODBC CRecordset ma możliwość utworzenia typu zestawu rekordów tylko do przekazywania. CDaoRecordset W klasie tylko do przodu nie jest typem zestawu rekordów, ale raczej właściwością (lub opcją) niektórych typów zestawów rekordów.

  • Zestaw rekordów tylko do dołączania podczas otwierania CRecordset obiektu oznacza, że dane zestawu rekordów mogą być odczytywane i dołączane. W przypadku CDaoRecordset obiektu opcja tylko do dołączania oznacza dosłownie, że dane zestawu rekordów można dołączać tylko (a nie odczytywać).

  • Funkcje składowe transakcji klasy ODBC są elementami CDatabase członkowskimi i działają na poziomie bazy danych. W klasach DAO funkcje składowe transakcji są elementami członkowskimi klasy wyższego poziomu (CDaoWorkspace), co może mieć wpływ na wiele CDaoDatabase obiektów współużytkujących ten sam obszar roboczy (przestrzeń transakcji).

  • Klasa wyjątków została zmieniona. CDBExceptions są zgłaszane w klasach ODBC i CDaoExceptions w klasach DAO.

  • RFX_Date używa obiektów CTime i TIMESTAMP_STRUCT podczas DFX_Date korzystania z elementu COleDateTime. Obiekt COleDateTime jest prawie identyczny z CTimeelementem , ale jest oparty na 8-bajtowej dacie OLE, a nie na 4 bajtach time_t, dzięki czemu może przechowywać znacznie większy zakres danych.

    Uwaga

    Migawki dao () są tylko do odczytu, podczas gdy migawki ODBC (CDaoRecordsetCRecordset) mogą być aktualizowane w zależności od sterownika i korzystania z biblioteki kursorów ODBC. Jeśli używasz biblioteki kursorów, CRecordset migawki można aktualizować. Jeśli używasz dowolnego ze sterowników firmy Microsoft z pakietu Desktop Driver Pack 3.0 bez biblioteki kursorów ODBC, CRecordset migawki są tylko do odczytu. Jeśli używasz innego sterownika, sprawdź dokumentację sterownika, aby sprawdzić, czy migawki (STATIC_CURSORS) są tylko do odczytu.

Zobacz też

Uwagi techniczne według numerów
Uwagi techniczne według kategorii