TN055. Перенос приложений, использующих классы базы данных MFC ODBC, на классы MFC DAO
Примечание.
DAO используется с базами данных Access и поддерживается до Office 2013. Версия DAO 3.6 является окончательной и считается устаревшей. Среда и мастеры Visual C++ не поддерживают DAO (хотя классы DAO включены и их можно использовать). Корпорация Майкрософт рекомендует использовать шаблоны OLE DB или ODBC и MFC для новых проектов. Для обслуживания существующих приложений следует использовать только DAO.
Обзор
Во многих ситуациях может потребоваться перенести приложения, использующие классы баз данных ODBC MFC в классы баз данных DAO MFC. Эта техническая заметка подробно описана в большинстве различий между классами ODBC и DAO MFC. Учитывая различия, при необходимости не следует слишком трудно перенести приложения из классов ODBC в классы MFC.
Почему миграция из ODBC в DAO
Существует ряд причин, по которым может потребоваться перенести приложения из классов баз данных ODBC в классы баз данных DAO, но решение не обязательно является простым или очевидным. Следует помнить, что ядро СУБД Microsoft Jet, используемое DAO, может считывать любой источник данных ODBC, для которого у вас есть драйвер ODBC. Это может быть более эффективным для использования классов баз данных ODBC или вызова ODBC напрямую, но ядро СУБД Microsoft Jet может считывать данные ODBC.
Некоторые простые случаи, которые упрощают решение ODBC/DAO. Например, если вам нужен доступ только к данным в формате, который подсистема Microsoft Jet может читать напрямую (формат Access, формат Excel и т. д.), очевидный выбор — использовать классы баз данных DAO.
Более сложные случаи возникают, когда данные существуют на сервере или на различных серверах. В этом случае решение об использовании классов базы данных ODBC или классов базы данных DAO является трудным. Если вы хотите выполнить такие действия, как разнородные соединения (присоединение данных с серверов в нескольких форматах, таких как SQL Server и Oracle), ядро СУБД Microsoft Jet будет выполнять присоединение, а не заставлять вас выполнять необходимые действия, если вы использовали классы баз данных ODBC или называется ODBC напрямую. Если вы используете драйвер ODBC, поддерживающий курсоры драйверов, лучше всего выбрать классы базы данных ODBC.
Выбор может быть сложным, поэтому может потребоваться написать пример кода для тестирования производительности различных методов, учитывая особые потребности. В этой технической заметке предполагается, что вы приняли решение перенести классы баз данных ODBC в классы базы данных DAO.
Сходство между классами баз данных ODBC и классами баз данных DAO MFC
Первоначальное проектирование классов ODBC MFC основано на объектной модели DAO, которая используется в Microsoft Access и Microsoft Visual Basic. Это означает, что существует множество распространенных функций классов ODBC и DAO MFC, которые не будут перечислены в этом разделе. Как правило, модели программирования одинаковы.
Чтобы выделить несколько сходств, выполните следующие действия.
Классы ODBC и DAO имеют объекты базы данных, которые управляют с помощью базовой системы управления базами данных (СУБД).
Оба объекта набора записей представляют набор результатов, возвращаемых из этой СУБД.
База данных DAO и объекты набора записей практически идентичны классам ODBC.
При использовании обоих наборов классов код для получения данных идентичен, за исключением некоторых изменений имени объекта и элемента. Изменения потребуются, но обычно процесс является простым изменением имени при переключении классов ODBC на классы DAO.
Например, в обоих моделях процедура извлечения данных заключается в создании и открытии объекта базы данных, создании и открытии объекта набора записей и переходе (перемещение), хотя данные выполняют некоторые операции.
Различия между классами ODBC и DAO MFC
Классы DAO включают в себя больше объектов и более широкий набор методов, но в этом разделе содержатся только различия в аналогичных классах и функциях.
Вероятно, наиболее очевидные различия между классами — это изменения имен для аналогичных классов и глобальных функций. В следующем списке показаны изменения имен объектов, методов и глобальных функций, связанных с классами баз данных:
Класс или функция | Эквивалентен классам DAO MFC |
---|---|
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
основана на CTime
и TIMESTAMP_STRUCT
.
Основные изменения функциональных возможностей, которые могут повлиять на приложение и требуют более простых изменений имен, перечислены ниже.
Константы и макросы, используемые для указания таких элементов, как открытый тип набора записей и открытый набор записей, были изменены.
С помощью классов ODBC MFC, необходимых для определения этих параметров с помощью макросов или перечисленных типов.
С помощью классов DAO DAO daO предоставляет определение этих параметров в файле заголовка (DBDAOINT). H). Таким образом, тип набора записей является перечислимым элементом
CRecordset
, но с DAO вместо этого является константой. Например, вы будете использовать моментальный снимок при указании типаCRecordset
в ODBC, но DB_OPEN_SNAPSHOT при указании типаCDaoRecordset
.Тип набора записей по умолчанию для моментального снимка, а тип
CDaoRecordset
CRecordset
набора записей по умолчанию — dynaset (см. примечание ниже для дополнительной проблемы с моментальными снимками класса ODBC).Класс ODBC
CRecordset
имеет возможность создать тип набора записей только для пересылки.CDaoRecordset
В классе только пересылка — это не тип набора записей, а свойство (или параметр) определенных типов наборов записей.Набор записей только для добавления при открытии
CRecordset
объекта означает, что данные набора записей могут быть прочитаны и добавлены. При использованииCDaoRecordset
объекта параметр только для добавления означает, что данные набора записей могут быть добавлены только (и не считываются).Функции-члены транзакций классов ODBC являются членами
CDatabase
и действуют на уровне базы данных. В классах DAO функции-члены транзакции являются членами класса более высокого уровня (CDaoWorkspace
) и, таким образом, могут повлиять на несколькоCDaoDatabase
объектов, совместное использование одной рабочей области (пространство транзакций).Класс исключений был изменен.
CDBExceptions
создаются в классах ODBC иCDaoExceptions
в классах DAO.RFX_Date
используетCTime
иTIMESTAMP_STRUCT
объекты во времяDFX_Date
использованияCOleDateTime
. ОнCOleDateTime
почти идентиченCTime
, но основан на 8-байтовой OLE DATE , а не на 4-байтовом time_t , чтобы он может содержать гораздо больший диапазон данных.Примечание.
Моментальные снимки DAO (
CDaoRecordset
) доступны только для чтения, а моментальные снимки ODBC (CRecordset
) могут быть обновлены в зависимости от драйвера и использования библиотеки курсоров ODBC. При использовании библиотекиCRecordset
курсоров моментальные снимки можно обновить. Если вы используете любой из драйверов Майкрософт из пакета драйвера для настольных компьютеров 3.0 без библиотеки курсоров ODBC,CRecordset
моментальные снимки доступны только для чтения. Если вы используете другой драйвер, проверка документацию драйвера, чтобы узнать, доступны ли моментальные снимки (STATIC_CURSORS
только для чтения).
См. также
Технические примечания по номеру
Технические примечания по категории