Введение в базы данных

Часть 4. Механизмы доступа к данным. Borland Database Engine и альтернативы

Алексей Федоров, Наталия Елманова

Какими бывают механизмы доступа к данным

ODBC

OLE DB и ADO

BDE

     Что такое BDE

     Доступ к популярным серверным СУБД с помощью BDE

Другие механизмы доступа к данным

     Компоненты для доступа к ODBC-источникам

     Компоненты прямого доступа к Oracle

     Компоненты прямого доступа к IB Database

     Компоненты Titan для доступа к различным СУБД

     Компоненты управления данными dBase и dBase-подобных СУБД

Заключение

 

В предыдущих двух статьях данного цикла, опубликованных в КомпьютерПресс 4, 5’2000, мы обсудили наиболее характерные особенности современных настольных и серверных СУБД и предоставляемые ими возможности. Мы также рассмотрели наиболее популярные настольные СУБД — dBase, Paradox, FoxPro, Access, MSDE, а также наиболее популярные серверные СУБД — Oracle, Informix, DB2, Sybase, Microsoft SQL Server.

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

Какими бывают механизмы доступа к данным

Существует несколько способов доступа к данным из средств разработки и клиентских приложений.

Подавляющее большинство систем управления базами данных содержит в своем составе библиотеки, предоставляющие специальный прикладной программный интерфейс (Application Programming Interface, API) для доступа к данным этой СУБД. Обычно такой интерфейс представляет собой набор функций, вызываемых из клиентского приложения. В случае настольных СУБД эти функции обеспечивают чтение/запись файлов базы данных, а в случае серверных СУБД инициируют передачу запросов серверу баз данных и получение от сервера результатов выполнения запросов или кодов ошибок, интерпретируемых клиентским приложением. Библиотеки, содержащие API для доступа к данным серверной СУБД, обычно входят в состав ее клиентского программного обеспечения, устанавливаемого на компьютерах, где функционируют клиентские приложения.

В последнее время Windows-версии клиентского программного обеспечения наиболее популярных серверных СУБД, в частности Microsoft SQL Server, Oracle, Informix, содержат также COM-серверы, предоставляющие объекты для доступа к данным и метаданным.

Использование клиентского API (или клиентских COM-объектов) является наиболее очевидным (и нередко самым эффективным с точки зрения производительности) способом манипуляции данными в приложении. Однако в этом случае созданное приложение сможет использовать данные только СУБД этого производителя, и замена ее на другую (например, с целью расширения хранилища данных или перехода в архитектуру «клиент-сервер») повлечет за собой переписывание значительной части кода клиентского приложения — клиентские API и объектные модели не подчиняются никаким стандартам и различны для разных СУБД.

Другой способ манипуляции данными в приложении базируется на применении универсальных механизмов доступа к данным. Универсальный механизм доступа к данным обычно реализован в виде библиотек и дополнительных модулей, называемых драйверами или провайдерами. Библиотеки содержат некий стандартный набор функций или классов, нередко подчиняющийся той или иной спецификации. Дополнительные модули, специфичные для той или иной СУБД, реализуют непосредственное обращение к функциям клиентского API конкретных СУБД.

Отметим, что достоинством универсальных механизмов является возможность применения одного и того же абстрактного API, а во многих случаях — COM-серверов, компонентов, классов для доступа к разным типам СУБД. Поэтому приложения, использующие универсальные механизмы доступа к данным, легко модифицировать, если необходима смена СУБД. При этом нередко модификация затрагивает не код приложения как таковой, а настройки доступа к данным, содержащиеся в реестре или внешних файлах. Однако за подобную универсальность порой приходится платить невозможностью доступа к уникальной функциональности, специфичной для конкретной СУБД, снижением производительности приложений, а также усложнением процедуры поставки приложения — ведь в его состав нужно включать библиотеки, ответственные за реализацию универсальных механизмов, драйверы для тех или иных СУБД, а также обеспечивать настройки, необходимые для их правильного функционирования.

Наиболее популярными среди универсальных механизмов доступа к данным можно назвать следующие:

  • Open Database Connectivity (ODBC).

  • OLE DB.

  • ActiveX Data Objects (ADO).

  • Borland Database Engine (BDE).

Универсальные механизмы ODBC, OLE DB и ADO фирмы Microsoft представляют собой по существу промышленные стандарты. Что касается механизма доступа к данным BDE фирмы Borland, то он так и не стал промышленным стандартом, однако до недавнего времени применялся довольно широко, так как до выхода Delphi 5 был практически единственным универсальным механизмом доступа к данным, поддерживаемым средствами разработки Borland на уровне компонентов и классов.

Наиболее часто используемые в приложениях способы доступа к данным схематически изображены на рис. 1.

Как видно из приведенной схемы, в общем случае приложение, использующее базы данных, может применять следующие механизмы доступа к ним:

  • Непосредственный вызов функций клиентского API (или обращение к COM-объектам клиентских библиотек).

  • Вызов функций ODBC API (или применение классов, инкапсулирующих подобные вызовы).

  • Непосредственное обращение к интерфейсам OLE DB.

  • Применение ADO (или применение классов, инкапсулирующих обращение к объектам ADO).

  • Применение ADO + OLE DB + ODBC.

  • Применение BDE + SQL Links (или применение классов, инкапсулирующих обращение к функциям BDE).

  • Применение BDE + ODBC Link + ODBC.

Помимо этих существуют и иные способы доступа к данным, обычно в той или иной степени использующие перечисленные универсальные механизмы или непосредственно клиентские API.

Ниже мы кратко остановимся на наиболее широко используемых универсальных механизмах, а затем рассмотрим Borland Database Engine и наиболее популярные продукты третьих фирм, способные его заменить.

В начало В начало

ODBC

ODBC (Open Database Connectivity) — широко распространенный программный интерфейс фирмы Microsoft, удовлетворяющий стандартам ANSI и ISO для интерфейсов обращений к базам данных (Call Level Interface, CLI). Для доступа к данным конкретной СУБД с помощью ODBC, кроме собственно клиентской части этой СУБД, нужен ODBC Administrator (приложение, позволяющее определить, какие источники данных доступны для данного компьютера с помощью ODBC, и описать новые источники данных), и ODBC-драйвер для доступа к этой СУБД. ODBC-драйвер представляет собой динамически загружаемую библиотеку (DLL), которую клиентское приложение может загрузить в свое адресное пространство и использовать для доступа к источнику данных. Для каждой используемой СУБД нужен собственный ODBC-драйвер, так как ODBC-драйверы используют функции клиентских API, разные для различных СУБД.

С помощью ODBC можно манипулировать данными любой СУБД (и даже данными, не имеющими прямого отношения к базам данных, например данными в файлах электронных таблиц или в текстовых файлах), если для них имеется ODBC-драйвер. Для манипуляции данными можно использовать как непосредственные вызовы ODBC API, так и другие универсальные механизмы доступа к данным, например OLE DB, ADO, BDE, реализующие стандартные функции или классы на основе вызовов ODBC API в драйверах или провайдерах, специально предназначенных для работы с любыми ODBC-источниками.

Говоря об ODBC, нельзя не отметить, что спецификация ODBC подразумевает несколько стандартов на ODBC-драйверы (обычно в этом случае употребляются термины Level 1, Level 2 и т.д.). Эти стандарты отличаются различной функциональностью, которая должна быть реализована в таком драйвере. Например, драйверы, соответствующие стандарту Level 1, не обязаны поддерживать работу с хранимыми процедурами, а некоторые ODBC-драйверы не поддерживают двухфазное завершение транзакций (применяемое в том случае, когда требуется согласованное изменение данных в нескольких различных серверных СУБД).

В начало В начало

OLE DB и ADO

OLE DB и ADO — часть универсального механизма доступа к данным Microsoft (Microsoft Universal Data Access), позволяющая осуществить доступ как к реляционным, так и к нереляционным источникам данных, таким как файловая система, данные электронной почты, многомерные хранилища данных и др.

Microsoft ActiveX Data Objects (ADO) — это набор библиотек, содержащих COM-объекты, реализующие прикладной программный интерфейс для доступа к таким данным и используемые в клиентских приложениях. ADO использует библиотеки OLE DB, предоставляющие низкоуровневый интерфейс для доступа к данным. OLE DB предоставляет доступ к данным с помощью COM-интерфейсов. Можно также использовать OLE DB непосредственно, минуя ADO.

Для доступа к источнику данных с помощью OLE DB требуется, чтобы на компьютере, где используется клиентское приложение, был установлен OLE DB-провайдер для данной СУБД. OLE DB-провайдер представляет собой DLL, загружаемую в адресное пространство клиентского приложения и используемую для доступа к источнику данных. Для каждого типа СУБД нужен собственный OLE DB-провайдер, так как эти провайдеры базируются на функциях клиентских API, разных для различных СУБД.

Среди OLE DB-провайдеров для разных источников данных имеется специальный провайдер Microsoft OLE DB Provider for ODBC Drivers. Этот провайдер использует не API клиентской части какой-либо СУБД, а интерфейс ODBC API, поэтому он применяется вместе с ODBC-драйвером для выбранной СУБД.

Отметим, что ADO становится все более популярным способом доступа к данным, так как входит в состав таких широко используемых продуктов, как Microsoft Office 2000 и Microsoft Internet Explorer 5.0, а также включен в ядро операционных систем семейства Windows 2000.

Более подробно об OLE DB и ADO будет рассказано в следующей статье данного цикла.

В начало В начало

BDE

Обсудив наиболее популярные универсальные механизмы доступа к данным, можно перейти к предмету данной статьи — Borland Database Engine.

В начало В начало

Что такое BDE

BDE (Borland Database Engine) — универсальный механизм доступа к данным, применяемый в средствах разработки фирмы Borland (а именно — Delphi и C++Builder), а также в некоторых других продуктах, например Corel Paradox, Corel Quattro Pro, Seagate Software Crystal Reports.

BDE — это наследник библиотеки Paradox Engine, созданной для Borland Pascal и Borland C++ с целью предоставить приложениям, разработанным с их помощью, доступ к таблицам СУБД Paradox. Вскоре после создания Paradox Engine компанией Borland было разработано несколько библиотек-драйверов под общим названием SQL Links. Эти библиотеки расширили функциональность BDE, позволив применять имевшийся в Paradox Engine набор функций для доступа к данным dBase, ODBC-источников, а также наиболее популярных серверных СУБД. Позже к этому набору были добавлены библиотеки для доступа к Access и FoxPro.

Механизм Borland Database Engine широко использовался при создании приложений с базами данных с помощью Borland Pascal 7.0 и Borland C++ 4.5 и 5. Затем средства разработки Borland были преобразованы в средства быстрой разработки приложений (Rapid Application Development, RAD), и большинство вызовов BDE API оказалось инкапсулировано в компонентах доступа к данным библиотеки Visual Components Library (VCL). BDE был фактически единственным механизмом доступа к данным в Delphi и C++Builder, поддерживаемым на уровне компонентов, классов, а также визуальных компонентов для редактирования данных, вплоть до 5-й версии обоих продуктов — Delphi и C++Builder.

Физически BDE представляет собой набор библиотек доступа к данным, реализующих BDE API — набор функций для манипуляции данными, вызываемых из приложения. Эти функции, в свою очередь, могут обращаться к функциям клиентского API (в случае, например, Oracle, Informix, IB Database) или ODBC API (Access 2000, Microsoft SQL Server 7.0, любые ODBC-источники), а также непосредственно манипулировать файлами некоторых СУБД (dBase, Paradox).

Для доступа к базе данных с помощью BDE на компьютере, содержащем клиентское приложение, должны быть установлены библиотеки BDE общего назначения, а также BDE-драйвер для данной СУБД. В случае серверных СУБД такие драйверы носят название SQL Links. Эти драйверы содержат BDE API — стандартный набор функций, созданных на основе функций клиентских API соответствующих СУБД.

Среди BDE-драйверов имеется драйвер, созданный с использованием ODBC API, — так называемый ODBC Link, который применяется вместе с ODBC-драйвером для выбранной СУБД.

В отличие от ODBC-драйверов и OLE DB-провайдеров, выпускаемых как производителями СУБД, так и многими сторонними производителями, BDE-драйверы производятся только самой компанией Inprise. Число СУБД, для которых имеются BDE-драйверы, ограничено пятью наиболее популярными серверными СУБД, рассмотренными в предыдущей статье нашего цикла, несколькими форматами данных настольных СУБД (в основном ранних версий СУБД, рассмотренных во второй статье этого цикла) и сервером IB Database, входящим в комплект поставки средств разработки Borland. Для доступа к данным остальных СУБД с помощью BDE можно использовать только ODBC-драйвер и ODBC Link. Ниже мы осветим это вопрос более подробно.

В начало В начало

Доступ к популярным серверным СУБД с помощью BDE

В этом разделе мы рассмотрим, какие СУБД доступны с помощью BDE-драйверов. Начнем с форматов наиболее популярных настольных СУБД.

Paradox, dBase, текстовые файлы

Для доступа к данным Paradox, dBase и текстовым файлам существуют BDE-драйверы прямого доступа, осуществляющие считывание и запись файлов этих СУБД. Более того, в документах Microsoft, посвященных доступу к данным Paradox и dBase, прямо указывается, что для записи данных в файлы этих СУБД с помощью ODBC или OLE DB (например, из приложений Visual Basic или VBA, при использовании этих файлов в качестве присоединенных баз данных Access или Microsoft SQL Server) на компьютере, где используется подобное приложение, следует установить BDE соответствующей версии, так как только эти драйверы осуществляют запись в такие файлы. Поэтому, применяя эти форматы данных в приложениях, созданных с помощью таких средств разработки, не только для чтения, но и для записи, необходимо установить BDE на компьютеры, где эти приложения будут эксплуатироваться (а еще лучше — подумать о смене формата данных). В таблице приведены сведения о том, какие версии BDE требуются для доступа к данным Paradox и dBase различных версий с помощью ODBC или OLE DB.

Из вышеизложенного следует, что не имеет особого смысла использовать ODBC-драйверы этих СУБД и ODBC Link, по крайней мере в средствах разработки, поддерживающих BDE (Delphi, C++Builder), и в созданных с их помощью приложениях. Несмотря на то что такой доступ к данным технически вполне осуществим, реально в приложении все равно используется BDE-драйвер прямого доступа. В этом случае между приложением и драйвером оказываются две «лишние» библиотеки, не добавляющие никакой дополнительной функциональности, а лишь создающие неудобства при поставке приложения и настройке доступа к данным, к тому же нередко еще и снижающие производительность приложения.

Доступ к данным Paradox или поздних версий dBase непосредственно с помощью BDE в Visual Basic, Visual C++ и иных средств разработки, не ориентированных на поддержку BDE на уровне визуальных компонентов и классов, возможен только на уровне вызовов BDE API, что в принципе технически осуществимо, однако представляется несколько экзотическим подходом к решению проблемы.

Microsoft Access

BDE-драйвер прямого доступа в настоящее время доступен для Access 95 и Access 97. Оба эти драйвера работают только в том случае, когда на компьютере, где эксплуатируется использующее их приложение, установлена соответствующая версия библиотек Microsoft Jet Engine (она входит в комплект поставки Microsoft Access и Microsoft Visual FoxPro). Эти драйверы не способны работать с данными Access 2000.

Для доступа с помощью BDE к Access 2000 можно использовать соответствующий ODBC-драйвер и ODBC Link, при этом на компьютере, где эксплуатируется использующее их приложение, требуется наличие Microsoft Jet Engine 4.0. Он входит в состав Microsoft Access 2000, а также в состав Microsoft Data Access Components (MDAC). Последние доступны на Web-сайте корпорации Microsoft. Кстати, не все типы данных, используемые этой версией Access, поддерживаются BDE, поэтому может оказаться, что какие-то из таблиц или их столбцов окажутся недоступными.

Отметим, однако, что использование BDE — не самый эффективный способ доступа к данным Access. Применение его оправданно при использовании старых версий средств разработки Borland (Delphi 1.0-4.0, C++Builder 1.0-4.0), ориентированных на применение BDE как единственного механизма доступа к данным, поддерживаемого на уровне компонентов и классов. Что касается других средств разработки, а также последних версий Delphi и C++Builder, то при их применении более целесообразно осуществлять доступ к данным Access с помощью ADO и OLE DB, так как эти механизмы предоставляют по сравнению с BDE гораздо больше функциональных возможностей.

Microsoft FoxPro и Visual FoxPro

Доступ к данным FoxPro осуществим в первую очередь с помощью BDE-драйвера прямого доступа, позволяющего производить запись в файлы этой СУБД. Помимо этого возможен также доступ через ODBC Link и соответствующий ODBC-драйвер. Доступ к данным Visual FoxPro осуществим только с помощью ODBC Link и соответствующего ODBC-драйвера, ибо BDE-драйвер для баз данных Visual FoxPro (*.vfp) в настоящее время отсутствует.

Microsoft SQL Server и MSDE

BDE-драйвер прямого доступа существует сегодня для Microsoft SQL Server версий 4.x и 6.x. Он не всегда работает с Microsoft SQL Server 7.0 и MSDE, так как некоторые новые особенности Microsoft SQL Server 7.0, отсутствовавшие в прежних версиях этой СУБД, например ряд типов данных, не поддерживаются BDE.

Следует подчеркнуть, что, как и в случае с Access, несмотря на теоретическую возможность доступа к данным этой СУБД с помощью ODBC Link и соответствующего ODBC-драйвера, практически это осуществимо не всегда по той же самой причине.

Доступ к данным этой СУБД необходимо осуществлять с помощью ADO/OLE DB (либо с помощью объектной модели клиентской части этой СУБД).

Oracle, Sybase, IBM DB2, Informix, InterBase

Для всех перечисленных СУБД существуют BDE-драйверы прямого доступа (так называемые SQL Links). Помимо этого доступ к ним может быть осуществлен с помощью ODBC Link и ODBC-драйверов (такой доступ нередко применяется в случае, когда в качестве средства разработки используется Delphi Professional или C++Builder Professional, не имеющие SQL Links в своем составе). Отметим также, что для этих СУБД нередко имеется по нескольку ODBC-драйверов разных производителей (иногда поддерживающих разную функциональность).

В случае использования объектно-ориентированных возможностей Oracle 8 на данный момент более предпочтительно применение BDE, а не других универсальных механизмов доступа к данным, так как объектные типы данных этой СУБД поддерживаются ее BDE-драйвером прямого доступа, но не поддерживаются имеющимися версиями OLE DB-провайдеров. Однако поддержка этих возможностей на уровне компонентов и классов в Delphi и C++Builder возможна только начиная с версии 4.0.

ODBC-источники

Как уже было отмечено выше, для доступа с помощью BDE к источникам данных, отличным от перечисленных выше, следует использовать ODBC-драйвер и ODBC Link.

В таблице приведен список ODBC-драйверов, сертифицированных для использования с Delphi 5/C++Builder 5 и BDE.

В целом доступ к наиболее популярным СУБД может быть осуществлен с помощью BDE следующими способами.

Суммируя все сказанное выше, отметим, что по сравнению с другими универсальными механизмами доступа к данным применение BDE оправданно, когда:

  • для хранения данных используются СУБД, когда-то принадлежавшие фирме Borland (Paradox, dBase);

  • для создания приложений используются ранние версии средств разработки Borland вместе с Informix, IB Database, DB2, Sybase, а также ранними версиями Access и Microsoft SQL Server;

  • используются объектные расширения Oracle и средства разработки Borland двух последних версий.

Применение BDE абсолютно не оправданно, когда:

  • для создания приложений используются средства разработки, не принадлежащие и не принадлежавшие Borland (за исключением случаев, когда необходима запись в файлы Paradox и dBase);

  • для хранения данных используются Microsoft SQL Server 7.0 и Access 2000.

Мы видим, что применение BDE в ряде случаев связано с определенными ограничениями, причиной которых часто является отсутствие необходимых BDE-драйверов, которые, в отличие от ODBC-драйверов и OLE DB-провайдеров, не производит никто, кроме фирмы Borland. Этот недостаток отчасти могут восполнить другие продукты третьих фирм, имеющиеся сегодня в достаточном количестве.

В начало В начало

 

Следущая страница