Обзор
Сущность BDE
Алиасы
Системная информация утилиты настройки
BDE (BDECFG)
Установка драйверов ODBC и других
драйверов
Заключение
На этом уроке мы познакомимся с ядром баз данных компании Борланд - Borland Database Engine (BDE), а также научимся создавать и редактировать алиасы - механизм, облегчающий связь с базами данных. Кроме того, мы изучим, как конфигурировать ODBC драйверы.
Мощность и гибкость Delphi при работе с базами данных основана на низкоуровневом ядре - процессоре баз данных Borland Database Engine (BDE). Его интерфейс с прикладными программами называется Integrated Database Application Programming Interface (IDAPI). В принципе, сейчас не различают эти два названия (BDE и IDAPI) и считают их синонимами. BDE позволяет осуществлять доступ к данным как с использованием традиционного record-ориентированного (навигационного) подхода, так и с использованием set-ориентированного подхода, используемого в SQL-серверах баз данных. Кроме BDE, Delphi позволяет осуществлять доступ к базам данных, используя технологию (и, соответственно, драйверы) Open DataBase Connectivity (ODBC) фирмы Microsoft. Но, как показывает практика, производительность систем с использованием BDE гораздо выше, чем оных при использовании ODBC. ODBC драйвера работают через специальный “ODBC socket”, который позволяет встраивать их в BDE.
Все инструментальные средства баз данных Borland - Paradox, dBase, Database Desktop - используют BDE. Все особенности, имеющиеся в Paradox или dBase, “наследуются” BDE, и поэтому этими же особенностями обладает и Delphi.
Таблицы сохраняются в базе данных. Некоторые СУБД сохраняют базу данных в виде нескольких отдельных файлов, представляющих собой таблицы (в основном, все локальные СУБД), в то время как другие состоят из одного файла, который содержит в себе все таблицы и индексы (InterBase). Например, таблицы dBase и Paradox всегда сохраняются в отдельных файлах на диске. Директорий, содержащий dBase .DBF файлы или Paradox .DB файлы, рассматривается как база данных. Другими словами, любой директорий, содержащий файлы в формате Paradox или dBase, рассматривается Delphi как единая база данных. Для переключения на другую базу данных нужно просто переключиться на другой директорий. Как уже было указано выше, InterBase сохраняет все таблицы в одном файле, имеющем расширение .GDB, поэтому этот файл и есть база данных InterBase.
Удобно не просто указывать путь доступа к таблицам базы данных, а использовать для этого некий заменитель - псевдоним, называемый алиасом. Он сохраняется в отдельном конфигурационном файле в произвольном месте на диске и позволяет исключить из программы прямое указание пути доступа к базе данных. Такой подход дает возможность располагать данные в любом месте, не перекомпилируя при этом программу. Кроме пути доступа, в алиасе указываются тип базы данных, языковый драйвер и много другой управляющей информации. Поэтому использование алиасов позволяет легко переходить от локальных баз данных к SQL-серверным базам (естественно, при выполнении требований разделения приложения на клиентскую и серверную части).
Для создания алиаса запустите
утилиту конфигурации BDE (программу BDECFG.EXE), находящуюся в директории,
в котором располагаются динамические библиотеки BDE.
По умолчанию, при установке Delphi создается директорий IDAPI, в котором и располагаются указанные библиотеки; при этом иконка с BDECFG обязательно будет присутствовать в группе Delphi.
Главное окно утилиты настройки
BDE имеет вид, изображенный на рис.1.
Для создания алиаса выберите страничку “Aliases” и нажмите кнопку “New
Alias”. В появившемся диалоговом окне
введите имя алиаса и выберите его тип (тип базы данных) из выпадающего
списка. Тип алиаса может быть стандартным (STANDARD) для работы с локальными
базами в формате dBase или Paradox или соответствовать наименованию SQL-сервера
(InterBase, Sybase, Informix, Oracle и т.д.).
После создания нового алиаса
его имя появится в списке алиасов на той же страничке “Aliases”. Однако
просто создать алиас не достаточно. Вам нужно указать дополнительную информацию,
содержание которой зависит от типа выбранной базы данных. Например, для
баз данных Paradox и dBase (STANDARD) требуется указать лишь путь доступа
к данным:
TYPE | STANDARD |
PATH | c:\users\data |
SQL-сервер InterBase требует
задания десяти параметров, многие из которых можно оставить установленными
по умолчанию (кроме, обычно, параметров SERVER NAME и USER NAME):
TYPE | INTRBASE |
PATH | |
SERVER NAME | myserv:g:\users\contacts.gdb |
USER NAME | SYSDBA |
OPEN MODE | READ/WRITE |
SCHEMA CACHE SIZE | 8 |
LANGDRIVER | Pdox ANSI Cyrillic |
SQLQRYMODE | |
SQLPASSTHRU MODE | SHARED AUTOCOMMIT |
SCHEMA CACHE TIME | -1 |
В этом примере база данных CONTACTS.GDB размещается в директории USERS, находящемся на диске G Windows NT сервера, называющегося MYSERV. Имя пользователя при связи с базой данных по этому алиасу - SYSDBA. Остальные параметры - LANGDRIVER, SQLQRYMODE, SQLPASSTHRU MODE, SCHEMA CACHE SIZE и SCHEMA CACHE TIME рассмотрим подробней.
Параметр LANGDRIVER определяет языковый драйвер для доступа к базе данных. Для правильной работы с русскими буквами при работе с базой данных формата dBase нужно выбрать значение “dBASE RUS cp866”, при работе с базами данных формата Paradox и SQL-серверами (в том числе InterBase) - “Pdox ANSI Cyrillic”. Кроме того, на этапе создания базы данных InterBase необходимо указать CHARACTER SET (набор символов) WIN1251.
Параметр SQLQRYMODE появляется только в случае, если установлен Borland SQL Links для связи с SQL-серверами. Он определяет режим передачи SQL-запросов и может иметь три значения:
Параметр SCHEMA CACHE TIME определяет время, в течение которого будет кэшироваться информация из таблиц базы данных. Может иметь следующие значения:
Остановимся подробней на задании такого важного параметра, как SERVER NAME. В нем нужно указать не только имя сервера (на котором находится Ваша база данных) и полный путь доступа к базе, но и сетевой протокол. Создатели утилиты настройки BDE не сочли нужным выделять протокол в отдельный параметр, поэтому необходимо использовать следующие выражения:
Замечание. При доступе к SQL-серверным базам данных параметр PATH должен оставаться пустым, иначе ядро баз данных не сможет определить истинный путь к Вашей базе, и будет сгенерирована ошибка.
Итак, мы познакомились с наиболее важной возможностью утилиты настройки BDE - созданием и редактированием алиасов, определяющих параметры доступа к базам данных. Однако, утилита настройки BDE позволяет специфицировать не только алиасы, но и драйверы для доступа к базам данных, а также различную системную информацию, составляющую операционное окружение этих самых алиасов. Системная информация располагается на страничках “System”, “Date”, “Time”, “Number”. Рассмотрим подробней эти странички.
SEPARATOR - символ, используемый
для разделения дня, месяца и года в дате. Ему соответствует переменная
DateSeparator
(Char*). Обычно имеет значения
‘.’, ‘-’, ‘/’. Значение по умолчанию берется из параметра
sDate
секции [intl] файла WIN.INI.
MODE - управляет порядком
следования месяца, дня и года в дате и может иметь значения: 0 - для MDY
(месяц-день-год), 1 - для DMY (день-месяц-год), или 2 - для YMD (год -месяц-день).
Прямого соответствия переменным модуля SysUtils не имеет. Вместо него,
а также вместо параметров FOURDIGITYEAR, YEARBIASED, LEADINGZEROM и LEADINGZEROD
используются переменные ShortDateFormat(string[15])
и LongDateFormat
(string[31]).
В этих переменных могут применяться только символ-разделитель дат (DateSeparator)
и символьные выражения типа ‘m’, ‘mm’, ‘d’, ‘dd’, ‘yy’ и ‘yyyy’, определяющие
месяц, день и год. Например, формат “короткой” даты может выглядеть как
“dd.MM.yy”, а формат “длинной” даты - как “d MMMM yyyy 'г.'”. Значения
по умолчанию берутся из параметров sShortDate
и sLongDate
секции [intl] файла WIN.INI. Здесь уместно сделать небольшое замечание.
При отображении даты и времени в качестве символа-разделителя можно использовать
любой символ, в том числе и отличный от символа DateSeparator
(или TimeSeparator).
Однако при попытке вставить в таком формате дату или время BDE “выдаст”
ошибку, связанную с неправильным форматом даты/времени. Поэтому для корректной
вставки данных в таблицы необходимо, чтобы в переменной ShortDateFormat
символ-разделитель совпадал с символом DateSeparator,
а в переменной LongTimeFormat
(и ShortTimeFormat)
- с символом TimeSeparator.
Для изучения работы с форматами даты и времени посмотрите программу DateTime,
имеющуюся на вашем диске (рис. 3). Вы можете скопировать ее в свой директорий
и поэскпериментировать с отображением и вводом данных.
При установке SQL Links для какого-либо SQL-сервера Вам не требуется “вручную” добавлять драйверы связи с этим сервером - программа установки SQL Links сделает это автоматически. Заметим, что при установке Delphi Client-Server автоматически устанавливаются также и SQL Links, так что отдельно их инсталляцию проводить не требуется. Вам останется только подправить некоторые параметры (например, языковый драйвер) для установленных драйверов. Но кроме “родных” SQL Links, для доступа к SQL-серверам (и локальным базам данных) можно использовать ODBC-драйверы.
Delphi использует Microsoft
2.0 ODBC Driver Manager. Если Вы имеете версию ODBC Driver Manager, отличную
от указанной - сохраните существующие файлы ODBC.DLL и ODBCINST.DLL и скопируйте
файлы ODBC.NEW и ODBCINST.NEW из директория IDAPI в Ваш ODBC-директорий
(по умолчанию, это поддиректорий SYSTEM в “виндусовом” директории) и переименуйте
их соответственно в ODBC.DLL и ODBCINST.DLL.
Установка BDE-алиаса, основанного на ODBC-драйвере состоит из трех шагов. На первом шаге нужно создать ODBC-алиас, “опирающийся” на ODBC-драйвер, на втором шаге - создать над ним надстройку в виде BDE-драйвера, а на третьем шаге - определить стандартный BDE-алиас.
Установка ODBC-драйвера начинается с проверки того, какие драйверы уже находятся в Вашей системе. Для этого в Панели Управления (Control Panel) найдите иконку “ODBC” (рис. 4), которая запускает утилиту конфигурации ODBC. В ее диалоговом окне представлен список ODBC-алиасов (Data Source) с указанием в скобках ODBC-драйверов, на которых они основаны (рис. 5).
Для создания нового ODBC-алиаса
сначала нужно выбрать ODBC-драйвер. Для этого нажмите кнопку “Add”, имеющуюся
в правой части диалогового окна “Data Sources”, изображенного на рис. 5.
Если в списке установленных ODBC-драйверов не окажется нужного Вам драйвера,
вернитесь к окну “Data Sources” и установите новый драйвер, указав его
местонахождение (с помощью кнопки “Drivers”). После выбора ODBC-драйвера
перед Вами появится диалоговое окно, содержимое которого зависит от выбранного
Вами драйвера (рис. 6) и в котором Вы сможете произвести настройку ODBC-алиаса,
определив его имя (Data Source Name), выбрав версию продукта и указав директорий,
в котором находятся файлы базы данных. После нажатия кнопки “OK” ODBC-алиас
будет создан, и Вы вернетесь в окно “Data Sources” (рис. 5).
Следующий шаг состоит в создании BDE-надстройки над ODBC-алиасом. Для этого Вам нужно убедиться, что в Вашем директории IDAPI имеется файл IDODBC01.DLL - в противном случае нужно заново установить BDE. После этого можно загрузить утилиту настройки BDE. Если Вы нажмете кнопку “New ODBC Driver” на страничке “Drivers”, Вы увидите диалоговое окно, изображенное на рис.7. Название BDE-драйвера, основанного на ODBC-алиасе, по умолчанию, должно начинаться с букв “ODBC_”. Поэтому такие буквы уже вынесены перед названием драйвера, так что Вам не нужно их вводить. Введите любое название драйвера и выберите из выпадающих списков сначала ODBC-драйвер, а затем - созданный Вами на его основе ODBC-алиас (Default Data Source Name).
Таким образом, мы создали BDE-драйвер, основанный на ODBC-алиасе. После этого BDE-алиас создается стандартным способом, который мы рассмотрели выше.
Итак, на данном уроке мы изучили очень важное для работы с базами данных понятие - алиас, а также научились настраивать его параметры для корректной работы программы. Кроме того, изучены многие вопросы, касающиеся настройки системных параметров. Очень важной для совместимости с базами данных третьих фирм является возможность создавать ODBC-алиасы и работать с ними стандартными средствами BDE. В этот вопрос мы также постарались внести ясность.