Visual2000 · Архив статей Колесова & Павловой

VB 6.0: доступ к данным с помощью технологии ADO
Часть 1. ADO идет на смену DAO и RDO

Андрей Колесов, Ольга Павлова

© 1999, Андрей Колесов, Ольга Павлова
Авторский вариант. Статья была опубликована c незначительной литературной правкой в журнале "КомпьютерПресс" № 07/99, c. 158-165.


DAO, ADO, RDO...

DAO, ADO, RDO... Все это похоже на какую-то игру слов, где присутствуют два ключевых понятия: данные и объекты. (Data Access Objects — объекты доступа к данным, ActiveX Data Objects — ActiveX-объекты работы с данными, Remote Data Objects — объекты удаленных данных.) На самом же деле речь здесь идет о разных технологиях доступа к данным (см. приложение "Сравнение ADO, DAO и RDO"), которые имеют не только разные внутренние механизмы, но и, что, может быть, гораздо важнее для прикладного программиста, разные перспективы на будущее.

DAO и RDO известны уже достаточно давно, и появление двух разных механизмов было связано с необходимостью оптимизации решения двух отдельных задач: доступа к локальным и удаленным базам данных соответственно. Однако естественное развитие вычислительных систем привело к необходимости создания единого механизма, который обеспечил бы единый подход при работе с БД различных классов.

В результате несколько лет назад Microsoft предложила в качестве единого интерфейса для доступа к локальным и удаленным данным новую технологию ADO, которая сегодня является частью архитектуры Microsoft Universal Data Access (MUDA). (Обзор этой архитектуры см. Федоров А. "Универсальный доступ к данным: Microsoft UDA", КомпьютерПресс ь 1'99, с. 144).

В начало статьи

ADO 2.0 и новшества VB 6.0

Основой MUDA является OLE DB — низкоуровневый программный COM-интерфейс доступа к данным, который представляет собой развитие идеологии ODBC. Однако если ODBC предназначен для работы с реляционными базами данных (Access, DBF, SQL и др.), то OLE DB предлагает единообразный метод доступа к данным, хранящимся в разных источниках информации, в том числе и в нереляционных БД (например, в папках систем электронной почты или простых файлах), обеспечивая при этом поддержку работы с наборами данных и иерархическими наборами записей, неподключенными постоянно к сети.

Поставщиками таких данных (OLE DB Provider) могут быть любые источники (в том числе приложения), написанные в соответствии со спецификациями OLE DB. Так, доступ к базам данных ODBC выполняется с помощью OLE DB Provider for ODBC.

ADO представляет собой прикладной объектный интерфейс более высокого уровня, который упрощает доступ к средствам OLE DB разработчикам, использующим языки высокого уровня. В 1998 году Microsoft выпустила модернизированный вариант ADO 2.0, который был впервые включен в состав Visual Studio 6.0 и его автономных средств, в том числе VB 6.0.

ADO 2.0 представляет собой набор объектов, краткое описание которых приведено в табл. 1. VB-разработчик может работать напрямую или с помощью специальных средств, включенных в пакет. В первую очередь это новые элементы управления, функционирующие на основе OLE DB: ADO Data (является примерным аналогом уже известных элементов управления Data и Remote Data), DataGrid (DBGrid), DataList (DBList) и DataCombo (DBCombo).

Кроме того, VB 6.0 включает два новых инструмента работы с базами данных на основе OLE DB: конструктор Data Environment для установления связи с базами данных и создания отчетов, а также окно Data View для просмотра баз данных. (Мы уже подробно рассматривали эти средства в статье "Использование конструктора VB 6.0 Data Environment"). Следует также отметить, что VBпрограммист может создавать собственные поставщики данных OLE DB с помощью модуля классов (мы предполагаем рассмотреть этот вопрос в будущем).

Для использования ADO в VB-приложении нужно установить ссылку к библиотеке Microsoft ActiveX Data Objects Library 2.0 с помощью команды Project|References. Обратите внимание, что возможности ADO 2.0 доступны и при работе в среде VB 5.0. Для этого нужно установить на компьютер комплект MS Data Access Components, который можно загрузить, в частности, с узла www.microsoft.com/data/download.htm. Однако вы не сможете использовать элементы управления VB 5.0 совместно с элементом управления ADO Data. Впрочем, при желании можно воспользоваться компонентами независимых разработчиков, в том числе свободно распространяемых (например, по адресу: www.isgsoft.com).

В начало статьи

DAO, RDO, ADO. Что выбрать?

Итак, теперь VB 6.0 поддерживает три различные технологии работы с базами данных. Очевидно, что каждая технология имеет свои плюсы и минусы и выбор нужного инструмента определяется спецификой задачи, а также квалификацией и навыками разработчика. Мы уже не раз подчеркивали, что эффективность конкретного применения инструмента определяется не только (или даже не столько) его внутренним совершенством, но и умением программиста работать с ним.

Тем не менее стоит упомянуть о результатах тестирования производительности разных методов доступа к данным, приведенным в статье "VS 6.0 Benchmarks: New Features Don't Impact Speed" в журнале VBPJ (табл. 2). Там говорится об исследовании скоростных характеристик разных средств, входящих в состав Visual Studio 6.0, а также VB 5, для различных режимов работы программ (графика, математические задачи, обработка строк и пр.), в том числе и при работе с базами данных.

По результатам тестирования при работе с удаленными данными быстродействие ADO и RDO примерно одинаково. Что же касается локальных баз данных, то скорость ADO в 3-5 раз ниже, чем у DAO. Это, конечно, не очень здорово, но следует учитывать, что универсальный механизм всегда уступает специализированным, имея в качестве преимущества упрощение процесса разработки. (Современный стиль разработки заключается именно в таких приоритетах: главное — сократить трудоемкость разработки, а уже потом думать о повышении эффективности приложений. Можно осуждать подобный прагматизм, но факт остается фактом.)

Более важным является другой момент: Microsoft объявила, что будет усовершенствовать и обновлять только модель ADO (что соответствует общей стратегии корпорации на унификацию разных технологий на базе ActiveX), то есть DAO и RDO постепенно должны сойти со сцены.

Вывод из этого очевиден: если сейчас вы используете DAO или RDO для доступа к данным, то в конце концов вам, вероятно, придется совершить этот переход к ADO в новых разработках. Но когда это лучше сделать? С одной стороны, лучше раньше, чем позже. С другой — торопиться не надо. Здесь следует отметить еще два важных момента.

Многие VB-эксперты указывают на недостатки существующей сегодня версии ADO. Если не принимать во внимание снижение производительности, то главный упрек заключается в наличии довольно большого числа программных ошибок. (Microsoft придерживается принципов отраслевого единства: заработал сам на обновлении технологий — дай возможность заработать и другим поставщикам. Так что если вы хотите получить прежнюю производительность, то купите себе новый, более мощный компьютер.) В связи с этим эксперты журнала VBPJ советуют разработчикам дождаться выхода ADO 2.5. Впрочем, классический принцип освоения новых технологий говорит о том, что их использование в реальных системах лучше начинать с версии 3.

Так что вопрос о том, когда переходить к ADO, решать вам, но готовиться к этому нужно уже сегодня.

В начало статьи

ADO 2.1: новая версия технологии доступа к данным

(Текст этого раздела был опубликован в "КомпьютерПресс" № 8/99, с.169)

Мы уже отмечали выше, что Microsoft позиционирует свою технологию ActiveX Data Object как стратегическую технологию доступа к данным, которая должна со временем заменить уже давно существующие DAO и RDO. Однако до настоящего времени широкому принятию на вооружение ADO во многом мешали два фактора: существование ряда функциональных ограничений, а также "сырость" ее реализации (попросту говоря, ниличие ошибок).

По своим возможностям ADO 2.0, которая входит в состав Visual Studio 6.0, уступает уже давно опробованной технологии DAO. Например, разработчики, использующие ядро Access/Jet 3.51, не имеют возможности создавать такие объекты баз данных, как таблицы и поля. Метод OpenSchema объекта Connection позволяет просматривать часть структуры базы данных, однако его нельзя применять для создания баз данных или изменения структуры уже существующих баз данных. ADO 2.0 также не разрешает просматривать ряд элементов базы данных Jet, которые относятся к категории объектов безопасности. Более того, вы не можете даже выполнять программным образом многие операции над ядром Jet.

Однако в июне нынешнего года Microsoft объявила о выпуске новой версии ADO 2.1, которая может помочь справиться со многими проблемами. Номер версии указывает на то, что мы имеем дело не с новым выпуском технологии ADO, а с расширенным вариантом ADO 2.0, содержащим большой набор новых функций и несколько усовершенствованных функций из предыдущих выпусков ADO.

Кроме модернизированного варианта основной библиотеки в состав ADO 2.1 входит дополнительная библиотека ActiveX Data Objects Extensions for DDL and Security или просто ADOX, которая предоставляет разработчикам обширный набор инструментов для получения доступа к структуре, модели безопасности и процедурам, хранящимся в базе данных. В самом большом выигрыше окажутся программисты, использующие ядро Access/Jet, хотя ADOX также работает с драйверами SQL Server и ODBC OLE DB. Но следует иметь в виду, что Microsoft пока не обеспечивает поддержку ADOX со своими другими драйверами OLE DB.

Для использования ADOX в своем VB-проекте выберите Microsoft ADO Ext. 2.1 for DDL and Security в окне References (Project|References) и тогда вы получаете доступ к объектной модели ADOX. (Перед этим нужно установить ссылку Microsoft ActiveX Data Objects 2.1 Library.) Убедитесь, что вы работаете с правильной версией ADO — библиотека ADOX работает только с ADO версии 2.1. Модернизированный вариант основной библиотеки также обладает рядом новых функциональных возможностей:

В начало статьи

ПРИЛОЖЕНИЯ

В начало статьи

Сравнение ADO с RDO и DAO

Хотя ADO в целом покрывает функциональность DAO и RDO, она не является совместимой с ними на уровне языка программирования. Это означает, что модернизация уже существующих программ для использования ADO потребует как минимум преобразования кода приложения. В некоторых случая коррекция программ сводится к достаточно простой замене функций, но порой, особенно для наиболее эффективного использования новых возможностей ADO, может потребоваться более серьезная переработка.

DAO (Data Access Objects) был первым объектно-ориентированным интерфейсом, включенным в механизм работы с базами данных Microsoft Jet (используется в MS Access). Он позволял VB-программистам работать также с широким кругом реляционных базам данных через технологию ODBC. DAO наилучшим образом подходит для относительно небольших, локальных баз данных.

RDO (Remote Data Objects) является объектно-ориентированным интерфейсом доступа к данным, в котором сочетается простой стиль программирования DAO с высокой производительностью и гибкостью низкоуровневых функций ODBC. Доступ к локальным базам данных Jet и ISAM выполняется в RDO через драйверы ODBC, что снижает его быстродействие по сравнению с DAO. Однако RDO обеспечивает возможность работы с большим числом БД различных разработчиков, предоставляя средства доступа к таким элементам, как, например, запоминаемые процедуры и сложные результирующие наборы данных.

ADO является преемником DAO/RDO. В этой технологии реализована другая объектная модель: объектов стало меньше, но при этом их структура стала иерархической, увеличилось число свойств, методов, аргументов и событий. Функциональность ADO 2.0 наиболее близка к RDO, она работает с источниками данных, имеющих интерфейс OLE DB, обеспечивая поддержку DHTML-технологий и взаимодействие с данными, не имеющих постоянного подключения в сети. В настоящее время ADO не поддерживает весь спектр функций DAO, в частности язык определения данных (DDL). Microsoft обещает включить в будущие версии ADO компоненты DDL. По-видимому, не следует выполнять миграцию в ADO для большинства приложений, использующих DAO (возможно, кроме случая применения ODBCDirect), непосредственно сейчас, хотя для клиент-серверных приложений это уже имеет смысл.

В начало статьи

Таблица 1. Сводная информация об объектной модели ADO

Список объектов ADO

Объект Описание
Connection Обеспечивает обмен данными
Command Внедряет SQL-оператор
Parameter Внедряет параметр SQL-оператора
Recordset Обеспечивает навигацию и управление данными
Field Внедряет столбец объекта Recordset
Error Указывает ошибку установления связи
Property Внедряет характеристику объекта ADO

Список коллекций ADO

Коллекция Описание
Errors Все объекты Error, созданные в результате единичной ошибки при установлении связи
Parameters Все объекты Parameter, связанные с объектом Command
Fields Все объекты Field, связанные с объектом Recordset
Properties Все объекты Property, связанные с объектом Connection, Command, Recordset или Field

Список обработчиков событий ADO

Событие Описание
Установление связи
BeginTransComplete, CommitTransComplete, RollbackTransComplete Управление транзакциями. Сообщает о том, что текущая транзакция либо началась, либо завершилась, либо произошел ее откат
WillConnect, ConnectComplete, Disconnect Управление связью. Сообщает о том, что текущая связь либо будет установлена, либо уже установлена, либо завершена
WillExecute, ExecuteComplete Управление выполнением команды. Сообщает о том, что выполнение текущей команды либо начнется, либо завершилось
InfoMessage Информационное сообщение. Сообщает о существовании дополнительной информации о текущей операции
Объект Recordset
FetchProgress, FetchComplete Состояние выборки. Сообщает либо о ходе выполнения операции выборки данных, либо о том, что эта операция завершена
WillChangeField, FieldChangeComplete Управление изменением поля. Сообщает о том, что значение текущего поля либо изменится, либо уже изменилось
WillMove, MoveComplete, EndOfRecordset Управление навигацией. Сообщает о том, что текущее положение строки в объекте Recordset либо изменится, либо уже изменился, либо был достигнут конец файла
WillChangeRecord, RecordChangeComplete Управление изменением строки. Сообщает о том, что некоторые данные в текущей строке объекта Recordset либо изменятся, либо уже изменились
WillChangeRecordset, RecordsetChangeComplete Управление изменением объекта Recordset. Сообщает о том, что некоторые данные объекта Recordset либо изменятся, либо уже изменились

В начало статьи

Таблица 2. Результаты тестирования разных методов доступа к данным в VB 6.0

Рейтинг Метод доступа

Показатель

(операций в минуту)

Работа с локальными данными
1. DAO

49

2. RDO, server-side cursor

41

3. ADO OLE DB, server-side cursor

35

4. RDO, client-side cursor

32

5. ADO OLE DB, client-side cursor

27

6. ADO ODBC, server-side cursor

14

7. ADO ODBC, client-side cursor

10

Работа с удаленными данными
1. ADO OLE DB, server-side cursor

22,5

2. ADO ODBC, server-side cursor

22

3. RDO, client-side cursor

21,5

4. ADO OLE DB, client-side cursor

19

5. ADO ODBC, client-side cursor

18,5

6. RDO, server-side cursor

16,5

Источник: Журнал VBPJ N 14'98, с. 30-44. Ash Rofail, Yasser Shohoud "VS 6 .0 Benchmarks"

Примечание. Мы уже неоднократно подчеркивали, что любые результаты тестирования являются достаточно условными. И абсолютные, и относительные характристики могут существенно меняться в зависимости от конкретных условий: оборудования, системного ПО, квалификации разрабочика и, конечно, структуры и содержимого базы данных. Но точно так же подобные оценки представляют интерес хотя бы потому, что заставляют разработчика внимательнее изучить возможности повышения эффективности своих приложений, в том числе проведя соответствующее исследование разных методов.

В начало статьи