TN055: Миграция приложений класса базы данных MFC ODBC с классами MFC DAO
![]() |
---|
Что касается Visual C++ .NET, то среда и мастера Visual C++ больше не поддерживают DAO (хотя классы DAO включены и вы по-прежнему можете их использовать).Майкрософт рекомендует использовать шаблоны OLE DB или ODBC и MFC для новых проектов.DAO необходимо использовать только для поддержки существующих приложений. |
Общие сведения
Во многих случаях может быть требуется миграция приложений, которые используют классы баз данных MFC ODBC в классы баз данных MFC DAO.Эта заметка детализирует углублением технический большинство различий между классами ODBC и MFC DAO.С различиями в виду, не следует слишком сложно перенос приложений из классов ODBC с классами MFC, при необходимости.
Миграция из ODBC в DAO, почему?
Есть несколько причин, почему может понадобиться выполнить перенос приложений из классов баз данных ODBC с классами баз данных DAO, но не просто или решение обязательно явно.Одна всего необходимо помнить, что компонента database engine для jet (Майкрософт), который используется DAO может считывать любой источник данных ODBC, для которого имеется драйвер ODBC.Она может быть эффективнее использовать классы баз данных ODBC или функцию ODBC себя напрямую, но компонента database engine для jet (Майкрософт) может считывать данные ODBC.
Несколько простых варианты, которые делают простым решением ODBC/DAO.Например, когда необходимо лишь доступ к данным в формате, ядро СУБД Jet (Майкрософт) может читать напрямую (формат доступа, формат Excel и т д) очевидный выбор использовать классы баз данных DAO.
Более сложные случаи возникают, если данные существуют разнообразные на сервере или на разных серверах.В этом случае решение использовать классы базы данных, таких как ODBC и классы баз данных DAO строгое одно.Если требуется сделать, например, несродное union (данные о соединении из серверов в нескольких форматах, как SQL Server и Oracle), то ядро СУБД Microsoft jet выполняется соединение автоматически вместо этого принудительное содержащий требуемый при использовании классы баз данных ODBC или с именем ODBC напрямую.При использовании драйвера ODBC, которые поддерживают курсоры драйвера лучшим вариантом может быть классами баз данных ODBC.
Выбор может осложнить, поэтому вам может потребоваться написать определенный код примера для тестирования производительности различных методов заданного в специальную.Эта заметка предполагается, что вы сделали технический решение перенести базу данных из классов ODBC с классами баз данных DAO.
Сходства между классами баз данных ODBC и классы баз данных MFC DAO
Исходная структура классов MFC ODBC была основана на модели объектов DAO, которая используется в Microsoft Access и Microsoft Visual Basic.Это означает, что многие часто используемых функций, классов MFC ODBC и DAO, не будут перечислены в этом разделе.Как правило, модели программирования.
Выбрать несколько сходств:
И классы ODBC и DAO имеют объекты базы данных, которые управляют с помощью базовой системы управления базами данных (СУБД).
Используют объекты наборов записей, представляющий набор результатов, возвращаемых от СУБД.
Объекты базы данных и набора записей DAO имеют почти одинаковые члены классов ODBC.
С обоими наборами классов, код, чтобы получить данные идентичны за исключением некоторых изменений объекта и имени.Изменения не требуются, но обычно процесс - простая перемена имени при переключении из классов ODBC к классам DAO.
Например, в обеих моделях процедуру для получения данных создания и открытия объекта базы данных, создания и открытия объекта набора записей и перехода (перемещение), однако данные при выполнении некоторую операцию.
Различия между классами MFC DAO и ODBC
Классы DAO включают несколько объектов и более богатого набор методов, но этот раздел только детализирует углублением различия в похожих классов и функциональности.
Вероятность наиболее очевидное различия между классами изменения имен для подобных классов и глобальных функций.В следующем списке перечислены изменения имен объектов, методов и функциям глобального, связанных с классами баз данных:
Класс или функция |
Количество классов 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(-) |
RFX_Text |
DFX_Text |
RFX_Binary |
DFX_Binary |
RFX_LongBinary |
DFX_LongBinary |
* - Функция RFX_Date основана на CTime и TIMESTAMP_STRUCT.
Основные изменения функциональных возможностей, которые может повлиять на приложение и требует более простыми изменения имен перечислены ниже.
Были изменены, константы и макросы, используемые для указания действий, как тип открытого набора записей и параметры набора записей будет открыто.
ODBC с классами, необходимые для определения этих параметров с помощью макросов или перечисленные типы.
С помощью классов DAO DAO предоставляет определение этих параметров в файле заголовка (DBDAOINT.H).Таким образом, тип набора записей член перечисляемого CRecordset, но с DAO является константой.Например можно использовать Моментальный снимок, указывающие тип CRecordset в ODBC, но DB_OPEN_SNAPSHOT, указывающие тип CDaoRecordset.
По умолчанию тип набора записей для CRecordsetМоментальный снимок пока тип по умолчанию набора записей для CDaoRecordsetdynaset (см. примечание ниже дополнительных затрат о моментальных снимках класса ODBC).
Класс CRecordset ODBC имеет возможность создания типа набора записей вперед-только.В классе CDaoRecordset, вперед-только не является тип набора записей, а свойство (или) некоторых типов наборов записей.
Набор записей добавити-только при открытии объекта CRecordset соответствует, что данные объекта набора записей удалось считать и добавляются.С объектом CDaoRecordset, параметр добавити-только означает буквально, что данные объекта набора записей можно добавлять только (а не для чтения).
Функции-члены транзакции и члены классов ODBC CDatabase действующие на уровне базы данных.В классах DAO функции-члены транзакции члены класса более высокого уровня (и, таким образом CDaoWorkspace) могут влиять на несколько объектов CDaoDatabase, совместно использующих одну и ту же область (пространство транзакции).
Класс исключений был изменен.CDBExceptions создается в классы и CDaoExceptions ODBC в классах DAO.
RFX_Date использует CTime и объекты TIMESTAMP_STRUCT пока DFX_Date использует COleDateTime.COleDateTime почти идентичный CTime, но на основании 8 байте date OLE, а не 4 байт time_t поэтому он может содержать значительно больше диапазона данных.
Примечание
Моментальные снимки (DAO)CDaoRecordset только для чтения, пока моментальные снимки ODBC (CRecordset) могут быть обновляемым в зависимости от драйвера и использовать библиотеку курсоров ODBC.При использовании библиотеки курсоров, моментальные снимки CRecordset обновляемым.Если использовать все драйверы Microsoft от драйвера рабочего стола упаковывают 3,0 без библиотека курсоров ODBC моментальные снимки CRecordset только для чтения.Если используется другой драйвер, проверьте в документации по драйверу, чтобы определить, моментальные снимки (STATIC_CURSORS) только для чтения.