32 урока по Delphi

Урок 16: Настройка BDE

Содержание урока 16:
Обзор
Сущность BDE
Алиасы
Системная информация утилиты настройки BDE (BDECFG)
Установка драйверов ODBC и других драйверов
Заключение

1. Обзор

На этом уроке мы познакомимся с ядром баз данных компании Борланд - Borland Database Engine (BDE), а также научимся создавать и редактировать алиасы - механизм, облегчающий связь с базами данных. Кроме того, мы изучим, как конфигурировать ODBC драйверы.

2. Сущность BDE

Мощность и гибкость 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.

3. Алиасы

Таблицы сохраняются в базе данных. Некоторые СУБД сохраняют базу данных в виде нескольких отдельных файлов, представляющих собой таблицы (в основном, все локальные СУБД), в то время как другие состоят из одного файла, который содержит в себе все таблицы и индексы (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-запросов и может иметь три значения:

- NULL (пустая строка - режим по умолчанию) - запрос сначала посылается на SQL-сервер. Если сервер не может выполнить запрос, последний обрабатывается локально (это актуально для распределенных баз данных);
- SERVER - запрос посылается на SQL-сервер. Если сервер не может выполнить запрос, генерируется ошибка;
- LOCAL - запрос всегда выполняется на рабочей станции.

Параметр SQLPASSTHRU MODE определяет, могут ли запросы, передаваемые для выполнения на сервер (passthrouh SQL, использующие set-ориентированный подход), и стандартные вызовы BDE (использующие record-ориентированный навигационный подход) обрабатываться в одном и том же сеансе соединения с базой данных (в одном и том же “коннекте”) - быть “SHARED”. Он также может иметь три значения:

- SHARED AUTOCOMMIT (значение по умолчанию) - для каждой операции по одной строке таблицы автоматически стартует неявная транзакция, которая, в случае успеха, завершается оператором COMMIT (закрепляющим произведенные изменения). Такой подход наилучшим образом подходит для работы с локальными базами, но неэффективен для SQL-серверных баз данных, так как стартующие каждый раз новые транзакции значительно загружают сетевой траффик.
- SHARED NOAUTOCOMMIT - приложение должно явно стартовать и завершать транзакцию. Эта установка может привести к конфликтам в многопользовательской среде, где большое количество пользователей пытаются обновить одну и ту же строку таблицы.
- NOT SHARED - означает, что запросы, передаваемые для выполнения на сервер (passthrouh SQL), и стандартные вызовы BDE (методы Delphi) используют раздельные соединения (“коннекты”) с базой данных. Для управления транзакциями через “passthrouh SQL” необходимо устанавливать именно это значение, иначе “passthrouh SQL” и методы Delphi могут интерферировать друг с другом, что, в свою очередь, может привести к непредсказуемым результатам.

В параметре SCHEMA CACHE SIZE указывается число таблиц базы данных, информация о структуре которых будет кэшироваться, обеспечивая быстрый доступ к метаданным. Значение этого параметра может быть целым числом от 0 до 32. По умолчанию установлено число 8.

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

- -1 (значение по умолчанию) - информация из таблиц кэшируется до самого закрытия базы данных;
- 0 - информация из таблиц вообще не кэшируется;
- 1 - 2,147,483,647 - информация из таблиц кэшируется в течение указанного времени (в секундах).

Напомним, что установки по умолчанию параметров SQLQRYMODE, SQLPASSTHRU MODE, SCHEMA CACHE SIZE и SCHEMA CACHE TIME обеспечивают достаточно оптимальный режим работы с базой данных. Экспериментировать с ними для достижения наибольшей эффективности работы с конкретной базой данных желательно только после накопления некоторого опыта работы с BDE.

Остановимся подробней на задании такого важного параметра, как SERVER NAME. В нем нужно указать не только имя сервера (на котором находится Ваша база данных) и полный путь доступа к базе, но и сетевой протокол. Создатели утилиты настройки BDE не сочли нужным выделять протокол в отдельный параметр, поэтому необходимо использовать следующие выражения:

- для доступа по протоколу TCP/IP - IB_SERVER:PATH\DATABASE.GDB.
Например, путь к базе на Windows NT сервере будет выглядеть следующим образом - mynt:c:\ib\base.gdb, а к базе на UNIX-сервере - myunix:/ib/base.gdb;
- для доступа по протоколу IPX/SPX - IB_SERVER@PATH\DATABASE.GDB.
Например: mynw@sys:ib\base.gdb;
- для доступа по протоколу NETBEUI - \\IB_SERVER\PATH\DATABASE.GDB.
Например: \\mynt\c:\ib\base.gdb.

В этих примерах mynt - имя сервера Windows NT, myunix - имя сервера UNIX-системы, mynw - имя сервера Novell NetWare, sys - имя тома NetWare, ib - директорий, в котором находится база данных, base.gdb - имя базы данных InterBase. Для того чтобы правильно указать имя сервера Oracle, нужно писать имя по правилам Oracle - перед именем поставить @.

Замечание. При доступе к SQL-серверным базам данных параметр PATH должен оставаться пустым, иначе ядро баз данных не сможет определить истинный путь к Вашей базе, и будет сгенерирована ошибка.

1. Системная информация утилиты настройки BDE (BDECFG)

Итак, мы познакомились с наиболее важной возможностью утилиты настройки BDE - созданием и редактированием алиасов, определяющих параметры доступа к базам данных. Однако, утилита настройки BDE позволяет специфицировать не только алиасы, но и драйверы для доступа к базам данных, а также различную системную информацию, составляющую операционное окружение этих самых алиасов. Системная информация располагается на страничках “System”, “Date”, “Time”, “Number”. Рассмотрим подробней эти странички.

- System: Определяет память и технические установки для таблиц в формате Paradox. Установленные по умолчанию значения обеспечивают оптимальные параметры работы с таблицами Paradox. Однако, если у Вас возникают проблемы, Вы можете изменить минимальный и максимальный размер кэш-буфера (MINBUFSIZE, MAXBUFSIZE; значения по умолчанию соответственно 128 и 2048 Кб - должны быть меньше размера физической памяти, доступной для Windows), а также максимальную величину стандартной (low) памяти, используемой BDE для доступа к базе (LOW MEMORY USAGE LIMIT, значение по умолчанию - 32 Кб). Вы можете также специфицировать языковый драйвер по умолчанию (LANGDRIVER), однако языковый драйвер, установленный в алиасе, имеет больший приоритет. Аналогичным образом (и с теми же оговорками относительно приоритета) Вы можете изменить параметр SQLQRYMODE, если у Вас установлен Borland SQL Links. С помощью параметра LOCAL SHARE можно управлять возможностью одновременного доступа к таблицам из разных приложений через BDE и не через BDE (например, с использованием своей библиотеки доступа). Значение по умолчанию - false, что означает запрет такой работы. Параметр AUTO ODBC определяет режим выборки параметров алиасов, основанных на ODBC-драйверах. Установленное по умолчанию значение false означает, что параметры берутся из конфигурационного файла BDE (IDAPI.CFG). Если Вы желаете брать ODBC-алиасы из файла ODBC.INI, установите этот параметр в true. Стоит упомянуть и о параметре DEFAULT DRIVER, который используется всякий раз, когда в названии таблицы отсутствует расширение и таблица имеет формат локальных СУБД. Остальные параметры (VERSION и SYSFLAGS) являются системными, и их не следует изменять.

- Date: Определяет установки, используемые при конвертации строковых значений в дату и обратно. Основаны на значениях, устанавливаемых для каждой страны и зафиксированных в файле WIN.INI (секция [intl]). Однако, все параметры формата даты, времени и чисел BDE берет не из конфигурационного файла BDE, куда попадают данные установки, а из соответствующих переменных модуля SysUtils. По-видимому, эта ситуация произошла по недосмотру разработчиков. Поэтому мы перечислим параметры страничек “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). Вы можете скопировать ее в свой директорий и поэскпериментировать с отображением и вводом данных.

- Time: Определяет установки, используемые при конвертации строковых значений во время и обратно. Также основаны на значениях, устанавливаемых для каждой страны и зафиксированных в файле WIN.INI (секция [intl]). Аналогично дате, для формата времени совместно с ShortDateFormat используются переменные LongTimeFormat (обращаем внимание - именно LongTimeFormat, а не ShortTimeFormat) и TimeSeparator. Значения по умолчанию вычисляются по параметрам iTime и iTLZero секции [intl] файла WIN.INI. Кроме указанных переменных, для форматирования можно использовать переменные TimeAMString (основана на параметре s1159 секции [intl]) и TimePMString (основана на параметре s2359 секции [intl]).

- Number: Описывает трактовку чисел BDE. В частности, определяет символ для десятичной точки (переменная DecimalSeparator, основана на параметре sDecimal секции [intl]), разделитель для тысяч (переменная ThousandSeparator, основана на параметре sThousand секции [intl]), количество знаков после запятой (переменная CurrencyDecimals, основана на параметре sCurrDigits секции [intl]) и наличие лидирующих нулей.

Как уже отмечалось выше, утилита настройки BDE сохраняет всю конфигурационную информацию в файле IDAPI.CFG. Этот файл с предустановленными ссылками на драйверы и некоторыми стандартными алиасами создается при установке Delphi. Кроме того, он создается при установке файлов редистрибуции BDE (т.е. когда Вы переносите BDE и SQL Links на другие компьютеры).

1. Установка драйверов ODBC и других драйверов

При установке 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-алиас создается стандартным способом, который мы рассмотрели выше.

2. Заключение

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