ita_DIPL (663644), страница 3
Текст из файла (страница 3)
Архитектура BDEUDAPI основана на драйверах. Для каждого источника данных существует свой драйвер, который поддерживает не только последнюю версию источника, но и все предыдущие версии. Именно через такие драйверы осуществляется связывание и все обращения к данным. BDE поддерживает два класса драйверов. К первому классу относятся драйверы, обслуживающие SQL-серверы, причем каждый из этих серверов может использовать собственный диалект SQL. Во второй класс входят драйверы для локальных баз данных.
Архитектура BDEMDAPI является объектно-ориентированной, поэтому ее инфраструктура легко расширяется и обобщается. В комплекте BDE содержатся более пятидесяти языковых драйверов, которые используются всеми драйверами доступа к данным и всеми общими обработчиками и сортировщиками запросов. Инфраструктура BDEUDAPI предоставляет обширный набор инструментов, которые могут использоваться всеми драйверами.
Диспетчер памяти предоставляет дополнительные возможности по управлению памятью. В отладочном режиме этот модуль помечает, трассирует и разрешает все попытки использовать память.
Диспетчер буфера основывается на использовании приоритетов и поддерживает режим совместного использования буферов различными драйверами.
Сортировщик автоматически оптимизирует процесс использования доступной памяти и вызывается через соответствующую функцию BDE. Он использует установленный языковый драйвер для работы с различными наборами символов.
Кэш для данных BLOB позволяет производить чтение/запись произвольного места в бинарном объекте, при переполнении содержимое кэша автоматически записывается в разделяемый файл. Одновременно может быть открыто любое количество BLOB.
Генератор SQL транслирует запрос в формате QBE в эквивалентный запрос SQL, если он предназначен SQL-серверу.
Модуль реструктурирования поддерживает сложные изменения структур таблиц, в том числе добавление новых полей, удаление полей, изменение их имен, изменение свойств поля (тип, размер), ссылочной целостности таблицы и т. д. Также этот модуль создает новую таблицу, трансформирует данные и копирует их в нее.
Функции пакетной обработки включают копирование данных из одного формата в другой, переименование таблиц и т. д.
Модуль Xlate оптимизирует процесс преобразования форматов данных.
Модуль таблиц в памяти обеспечивает виртуальную память, ориентированную на таблицы. Он поддерживает курсоры приложений, как и любые другие курсоры IDAPI. Работа модуля тесно связана с работой диспетчера буфера.
Модуль поддержки SQL-драйверов используется при создании любых SQL-драйверов.
Конфигурационный диспетчер участвует в настройке среды BDE при начальной загрузке.
Системный диспетчер управляет всеми ресурсами системного уровня. Он отвечает за загрузку драйверов, отслеживание открытых баз данных, курсоров и контекста каждого приложения.
Общий обработчик запросов поддерживает и SQL и QBE. Он построен с использованием технологии курсоров BDE и поэтому может работать с любым источником данных. Если запрос может быть выполнен напрямую, то он сразу передается серверу. Запрос QBE предварительно транслируется в SQL.
Технология Idapter является составной частью BDE и предназначена для организации доступа к базам данных, используя стандартный программный интерфейс драйверов Borland SQL Links. Idapter транслирует вызовы функций интерфейса IDAPI в вызовы стандартных методов интерфейса ODBC, что позволяет использовать практически любой драйвер стандарта ODBC в режиме драйвера IDAPI. При этом могут использоваться любые функции интерфейса IDAPI. Технология Idapter существенно увеличивает число доступных
через BDE форматов данных. Поставляется совместно с IDAPI, как отдельная динамическая библиотека.
1.4 Пакет Borland SQL Links for Windows
Пакет Borland SQL Links for Windows предназначен для использования теми приложениями, работающими с BDE, которым необходим доступ и к локальным базам данных и к удаленным SQL-серверам. После инсталляции соответствующего драйвера SQL Links и создания необходимого псевдонима приложение получает доступ к базам данных необходимого SQL-сервера. Место SQL Links в механизме доступа к базам данных из приложений Delphi 7.0 показано на рисунке 4.7.
Установленный драйвер выполняет работу по соединению с нужным SQL-сервером, переводу запросов приложения в соответствующий диалект SQL и передаче запроса базе данных. Ответ базы данных снова преобразуется им к виду, воспринимаемому приложением.
Для установки параметров процесса связывания приложения с требуемым сервером SQL используется утилита конфигурации BDE. Естественно, что перед выполнением такой настройки необходимо иметь инсталлированный SQL Links с установленным драйвером для нужного сервера. Все настраиваемые параметры сосредоточены на странице Drivers утилиты конфигурации (см. рисунок 1.2).
SQL Links транслирует
Ответ клиента и посылает его BDE
Сервер SQL проверяет правильность запроса. выполняет его и отправляет приложению-клиенту
Рис. 1.2. Использование драйвера SQL Links приложением
Первым делом необходимо выбрать нужный драйвер из списка имен драйверов в левой части панели. В правой части появится список всех параметров драйвера и их текущих значений. При необходимости, можно переопределить значения параметров, заданные по умолчанию и сохранить изменения. Эффект от сделанных установок проявится только при следующем запуске приложения.
Ниже будут рассмотрены общие для всех драйверов SQL Links параметры.
Дополнительную информацию о специфических параметрах каждого драйвера можно получить, выбрав соответствующее имя в списке утилиты конфигурации
BDE и нажав кнопку Help.
DLL — определяет имя динамической библиотеки SQL Links для драйвера.
Driver Flags — внутренний флаг, изменять этот параметр не рекомендуется.
LangDriver — задает языковый драйвер, который применяется для манипулирования данными, полученными при помощи драйвера SQL Links. Поле ввода этого параметра содержит список всех доступных языковых драйверов. Если выбранный языковый драйвер определен также и в псевдониме приложения, то он используется для управления любыми данными, полученными от сервера. Языковый драйвер используется для преобразования данных, если приложение и сервер используют разные кодовые страницы. В противном случае все национальные символы превратятся в абракадабру. Если необходимый языковый драйвер отсутствует, можно использовать параметр SQLQRYMODE для отмены преобразования данных по правилам базы данных.
Open Mode — определяет режим, в котором SQL Links открывает доступ к базе данных. Возможные значения: "Чтение\3апись" и "Только для чтения". Режим "Только для чтения" не работает при использовании прямых запросов.
Schema Cache Size — задает число таблиц базы данных, чья структурная информация кэшируется. Возможные значения: 0—32 (по умолчанию 8).
Schema Cache Time — задает время нахождения структурной информации о таблицах в кэше. Возможные значения: -1 (по умолчанию) — до закрытия базы данных; 0 — информация в кэше не размещается; 1-214748347 — число секунд.
Server Name — содержит имя целевого сервера. Для серверов Interbase обязательно надо задавать маршрут, как это показано в примере:
servername/usr/gds/directoryname/databasename/gdb.
SQLPASSTHRUMODE — определяет режим использования прямых и локальных запросов при соединении через один псевдоним: NOT SHARED запрещает одновременное использование прямых и локальных запросов;
SHARED AUTOCOMMIT разрешает совместное использование, причем прямые запросы ведут себя в соответствии с правилами для локальных запросов, что означает режим автоматической фиксации транзакций, если только не установлено явное управление транзакциями или режим группового выполнения; SHARED NOAUTOCOMMIT разрешает совместное использование, но режим неявной фиксации транзакций не используется. Поведение прямых запросов зависит от типа сервера.
Предопределенное значение для серверов Informix — SHARED AUTOCOMMIT, для остальных серверов SQL — NOT SHARED. Режимы SHARED AUTOCOMMIT и SHARED NOAUTOCOMMIT не поддерживаются некоторыми предложениями прямых запросов, в этом случае следует использовать явное управление транзакциями через функции приложения.
SQLQRYMODE — определяет режим выполнения запросов, возможные значения приведены в таблице.
Таблица 1.1 Режимы выполнения запросов.
Значение | Режим | Комментарий |
NULL | Сервер-локальный | Запрос направляется сначала на сервер, затем, при невозможности выполнения, выполняется локально |
SERVER | Только сервер | Запрос направляется только на сервер, в случае невозможности выполнения, отменяется |
LOCAL | Только локальный | Запрос выполняется исключительно локально |
Значение по умолчанию — NULL. На получаемый результат запросов может влиять установленный языковый драйвер, если локальные базы данных и базы SQL имеют различные кодовые страницы (см. выше). Для устранения подобных ошибок необходимо установить для параметра значение SERVER, блокируя таким образом, выполнение запросов в локальных базах данных.
Type определяет тип используемого сервера. Значение SERVER определяет использование SQL-сервера. Значение FILE определяет использование обычных серверов, основанных на файловой системе.
User Name — задает имя пользователя для доступа к серверу.
Version — версия драйвера SQL Links.
Для доступа к серверу SQL необходимо иметь соответствующий псевдоним. Базовый псевдоним для каждого используемого драйвера SQL Links создается автоматически при первом изменении параметров драйвера после инсталляции.
1.5 Использование SQL
В этом разделе будут рассмотрены различные аспекты применения запросов SQL в приложениях, использующих базы данных. Для реализации запросов в Delphi 7.0 существует специальный компонент — TQuery, расположенный на странице Data Access Палитры компонентов. Он имеет много общих свойств с TTable и тоже используется для открытия наборов данных. В то же время TQuery обладает рядом свойств и методов, которые позволяют использовать все преимущества запросов SQL для работы с данными. Так, применение TQuery дает возможность работать с данными нескольких таблиц в одном запросе, отбирать данные сразу по нескольким критериям. Однако следует помнить, что использование SQL ведет к некоторому усложнению программного кода приложения. Кроме того, создание эффективного запроса — дело далеко не простое и требует наличия определенного опыта в этой области. Запросы SQL бывают статическими и динамическими. Статические запросы полностью создаются при отладке приложения, а динамические могут изменять свои параметры при выполнении приложения.
Приложения Delphi 7.0 при помощи механизма запросов SQL могут использовать данные:
• таблиц Paradox и dBase, используя синтаксис локального SQL;
• локального сервера Interbase, синтаксис языка поддерживается полностью;
• удаленных серверов SQL через драйверы SQL Links.
1.6 Особенности создания систем клиент/сервер
Возможность создания приложений для работы в составе систем клиент/сервер, бесспорно, стала большим преимуществом Delphi 7.0. Инструментарий для разработки таких приложений интегрирован в составе среды разработчика. Приложения Delphi 7.0, функционирующие на станции-клиенте, используя возможности BDE и драйверов SQL Links и ODBC, могут получать доступ к данным удаленных SQL-серверов. В качестве серверов могут быть использованы Informix, Interbase, Microsoft SQL Server, Oracle, Sybase. Кроме этого, через BDE и установленный драйвер ODBC возможен доступ к таким базам, как DB2, Btrieve, Microsoft Access и другим, для которых существует соответствующий драйвер ODBC.
Приложение, функционирующее на станции-клиенте, обычно создается отдельно и для уже работающих серверов баз данных. Поэтому, для создания работоспособной системы клиент/сервер необходимо решить ряд проблем связывания рабочих станций, совместимости данных при работе одного приложения-клиента с различными типами серверов, оптимизации производительности.
1.7 Совместимость / эффективность
Как известно, при создании приложений для систем клиент/сервер всегда приходится решать проблему выбора между универсальностью и производительностью. С одной стороны, чем большее количество типов серверов поддерживается приложением, тем лучше. Но в этом случае значительно понижается производительность. Впрочем, способ решения этой проблемы зависит от предназначения создаваемого приложения. Иногда можно пожертвовать совместимостью, а иногда оказывается не так уж и важна производительность.