Выбор между классами ODBC и DAO
Вы получили общее представление о классах ODBC Visual C++ и узнали о том, как они используются в приложениях, созданных с помощью мастера AppWizard. Visual C++ также включает полный набор классов DAO, которые можно использовать для создания БД-приложений. DAO во многих отношениях является для классов ODBC суперклассом, включая большинство функциональных возможностей ODBC и добавляя при этом множество своих собственных. К сожалению, хотя классы DAO и могут работать с источниками данных ODBC, для которых существуют ODBC-драйверы, такое их применение не особенно эффективно. По этой причине DAO-классы больше подходят для создания программных приложений, оперирующих файлами баз данных формата .mdb фирмы Microsoft, создаваемых приложением Microsoft Access. Файлы других форматов, с которыми можно, используя классы DAO, работать напрямую, создаются приложениями FoxPro и Excel.
Классы DAO, которые используют приложение Microsoft Jet Database Engine, настолько похожи на классы ODBC, что во многих случаях можно конвертировать программы ODBC в DAO путем простого изменения названия класса в тексте программы: CDatabase изменяется на CDaoDatabase, CRecordset изменяется на CDaoRecordset, a CRecordView изменяется на CDaoRecordView. Однако между классами ODBC и DAO имеется существенное различие в том, как реализуются системные библиотеки. ODBC-классы реализованы как набор модулей DLL, в то время как классы DAO реализованы в виде объектов OLE. Использование объектов OLE делает систему DAO несколько более современной в сравнении с ODBC, по крайней мере, в отношении архитектуры.
Хотя система DAO реализована в виде объектов OLE, вам не придется беспокоиться о работе с подобными объектами напрямую. Входящие в MFC классы DAO берут обработку всех деталей управления на себя, предоставляя данные и методы, обеспечивающие взаимодействие с объектами OLE. Класс CDaoWorkspace обеспечивает с помощью статических методов прямой доступ к объектам ядра базы данных DAO. Хотя MFC берет управление рабочей областью на себя, можно использовать ее данные и методы для непосредственной инициализации связи с базой данных.
Еще одно отличие состоит в том, что классы DAO предоставляют более мощный набор функций, которые можно использовать для манипулирования базой данных. Эти более мощные методы позволяют выполнять с базами данных сложные операции, используя небольшой объем исходного текста на C++ или SQL-выражения, написанные непосредственно разработчиком.
•Обе системы (ODBC и ОАО) могут работать с ODBC-источниками данных. Однако DАО менее эффективна при таком применении, так как больше подходит для работы с файлами баз данных формата .mdb.
•Мастер AppWizard может создать заготовку БД-приложения, используя либо классы ODBC, либо классы DАО. Выбор типа создаваемого приложения зависит, по крайней мере, частично, от баз данных, с которыми вы будете работать.
•Обе системы — и ODBC, и DAO — используют для соединения с базой данных, к которой осуществляется доступ, объекты классов баз данных MFC. В ODBC такой класс базы данных называется CDatabase, а в системе DAO — CDaoDatabase. Хотя эти классы и имеют разные названия, DAО-класс содержит множество членов, подобных тем, которые можно обнаружить в ODBC-классе.
•Обе системы, ODBC и DAO, используют объекты класса выборки данных для хранения записей, выбранных на текущий момент. В ODBC такой класс выборки данных называется CRecordset, а в системе DAO— CDaoRecordset. Хотя эти классы и имеют разные названия, DAO-класс выборки данных содержит практически все члены класса ODBC. Кроме того, DAO-класс имеет большой набор дополнительных методов.
•Системы ODBC и DAO используют схожие методики просмотра содержимого источника данных, а именно: в обеих системах приложение должно создать объект базы данных, создать объект выборки данных, а затем вызвать методы соответствующего класса для манипулирования базой данных.
Различия между системами ODBC и DAO состоят в следующем.
•Хотя входящие в MFC классы ODBC и DAO похожи (иногда даже очень), некоторые аналогичные методы имеют разные имена. Кроме того, классы DAO включают много методов, которым нет аналогов в классах ODBC.
•В системе ODBC для определения опций, которые могут использоваться при открытии выборки данных, используются макросы и перечисления, тогда как в DAO для этих целей определены константы.
•Большое количество существующих ODBC-драйверов делает систему ODBC пригодной для работы с множеством файлов баз данных различных форматов, в то время как система DAO больше подходит для приложений, работающих только с файлами формата . mdb.
•Система ODBC реализована в виде набора DLL-модулей, а DAO реализована как набор объектов OLE.
•В ODBC объект класса CDatabase напрямую взаимодействует с источником данных. В DAO объект класса CDaoWorkspace занимает промежуточное положение между объектами классов CDaoRecordset и CDaoDatabase, что дает возможность рабочей среде взаимодействовать со многими объектами класса баз данных.