Архитектура BDE и его особенности при работе с SQL-серверами - Архитектура
ОГЛАВЛЕНИЕ
Архитектура
Увлекшись историей я немного пропустил, зачем все это (BDE) делалось. Частичная цель упоминалась выше - предоставить универсальное ядро доступа к локальным форматам данных. Основная - обеспечить прозрачную работу приложений как с локальными форматами, так и с SQL-серверами. Как сейчас помню, что именно удобство при работе с SQL-серверами рекламировалось как основное. Однако в последние 2-3 года именно эта возможность вызывала наибольшее количество нареканий. Давайте рассмотрим архитектуру BDE.
Основная работа с BDE производится посредством внешнего интерфейса IDAPI (IDAPI32.DLL). Формат данных выбирается в псевдониме (alias) соединения, и в принципе дальше работа с разными форматами ничем не отличается. В том числе и неважно, как работает приложение с BDE - через компоненты VCL DB, которые используют функции BDE, или напрямую (все равно компоненты используют те же функции BDE).
Дальше функции IDAPI транслируют вызовы в функции соответствующего драйвера. Если это драйвер локального формата (dBase, Paradox, FoxPro), то драйвер формата сам работает с соответствующими файлами (таблицами и индексами). Если это SQL Link, то вызовы транслируются в вызовы функций API клиентской части конкретного SQL-сервера. Для каждого сервера SQL Link свой.
IDAPTOR (соединитель с ODBC) и интерфейс к DAO работает точно также как и SQL Link, т.е. просто транслирует вызовы BDE в вызовы ODBC или DAO, непосредственно к формату не имея никакого отношения.
Если посмотреть на файлы BDE, то можно подробно рассмотреть его составные части.
- IDAPI32.DLL
- Основной интерфейс
- BLW32.DLL, BANTAM.DLL
- Языковые функции
- *.BTL
- Файлы с языковыми кодировками.
- IDBAT32.DLL
- Операции пакетного копирования данных
- IDDR32.DLL
- Модуль работы с Data Repository
- IDASCI32.DLL
- Драйвер для работы с текстовым форматом
- IDDAO32.DLL
- Драйвер трансляции вызовов к DAO
- IDODBC32.DLL
- Драйвер трансляции вызовов к ODBC
- IDPDX32.DLL
- Драйвер для работы с форматом Paradox
- IDDBAS32.DLL
- Драйвер для работы с форматом dBase и FoxPro
- IDQBE32.DLL
- Ядро обработки запросов QBE
- IDSQL32.DLL
- Ядро обработки запросов SQL
- SQLINT32.DLL
- SQLLink-драйвер трансляции вызовов к Interbase API
- SQLORA32.DLL
- SQLLink-драйвер трансляции вызовов к Oracle Call Level Interface
- SQL*32.DLL
- Другие SQLLink-драйверы
Таким образом, при установке BDE "лишние" файлы можно без проблем выкинуть.
Также, надеюсь, понятно, почему BDE "не работает" с SQL-сервером, если не установлена клиентская часть этого сервера (то же самое по отношению к DAO - без дистрибутива DAO BDE не будет работать с файлами MS Access). Вообще клиентские части SQL-серверов несовместимы между собой абсолютно. Поэтому невозможно написать универсальный SQL Link.
Данный рисунок и список файлов, возможно, развеет популярный миф о том, что Delphi хорошо приспособлена для работы с Interbase. Как видите, Interbase для Delphi столь же равноправен, как скажем, Oracle или любой ODBC-драйвер. В отличие от продуктов Microsoft в BDE нет никаких "обходных" функций для работы со своими форматами, т.е. работа с IB ведется только через SQL Link (без sqlint32.dll BDE вообще не знает, что такое Interbase).
Отдельное место в архитектуре BDE и среди упомянутых файлов занимают Local SQL и QBE Engine. Эти механизмы запросов будут рассмотрены чуть дальше.