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_Date1 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.

  • Тип набора записей по умолчанию для моментального снимка, а тип CDaoRecordsetCRecordset набора записей по умолчанию — 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только для чтения).

См. также

Технические примечания по номеру
Технические примечания по категории