Системная информация утилиты настройки BDE
32 урока по Delphi
Урок 16: Настройка BDE
Содержание урока 16:
Обзор
Сущность 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.
Удобно не просто указывать путь доступа к таблицам базы данных, а использовать для этого некий заменитель - псевдоним, называемый алиасом. Он сохраняется в отдельном конфигурационном файле в произвольном месте на диске и позволяет исключить из программы прямое указание пути доступа к базе данных. Такой подход дает возможность располагать данные в любом месте, не перекомпилируя при этом программу. Кроме пути доступа, в алиасе указываются тип базы данных, языковый драйвер и много другой управляющей информации. Поэтому использование алиасов позволяет легко переходить от локальных баз данных к 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 |
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 - запрос всегда выполняется на рабочей станции.
- SHARED AUTOCOMMIT (значение по умолчанию) - для каждой операции по одной строке таблицы автоматически стартует неявная транзакция, которая, в случае успеха, завершается оператором COMMIT (закрепляющим произведенные изменения). Такой подход наилучшим образом подходит для работы с локальными базами, но неэффективен для SQL-серверных баз данных, так как стартующие каждый раз новые транзакции значительно загружают сетевой траффик.
- SHARED NOAUTOCOMMIT - приложение должно явно стартовать и завершать транзакцию. Эта установка может привести к конфликтам в многопользовательской среде, где большое количество пользователей пытаются обновить одну и ту же строку таблицы.
- NOT SHARED - означает, что запросы, передаваемые для выполнения на сервер (passthrouh SQL), и стандартные вызовы BDE (методы Delphi) используют раздельные соединения (“коннекты”) с базой данных. Для управления транзакциями через “passthrouh SQL” необходимо устанавливать именно это значение, иначе “passthrouh SQL” и методы Delphi могут интерферировать друг с другом, что, в свою очередь, может привести к непредсказуемым результатам.
- -1 (значение по умолчанию) - информация из таблиц кэшируется до самого закрытия базы данных;
- 0 - информация из таблиц вообще не кэшируется;
- 1 - 2,147,483,647 - информация из таблиц кэшируется в течение указанного времени (в секундах).
Остановимся подробней на задании такого важного параметра, как SERVER NAME. В нем нужно указать не только имя сервера (на котором находится Ваша база данных) и полный путь доступа к базе, но и сетевой протокол. Создатели утилиты настройки BDE не сочли нужным выделять протокол в отдельный параметр, поэтому необходимо использовать следующие выражения:
- для доступа по протоколу TCP/IP - IB_SERVER:PATH\DATABASE.GDB.
- для доступа по протоколу IPX/SPX - IB_SERVER@PATH\DATABASE.GDB.
- для доступа по протоколу NETBEUI - \\IB_SERVER\PATH\DATABASE.GDB.
Например, путь к базе на Windows NT сервере будет выглядеть следующим образом - mynt:c:\ib\base.gdb, а к базе на UNIX-сервере - myunix:/ib/base.gdb;
Например: mynw@sys:ib\base.gdb;
Например: \\mynt\c:\ib\base.gdb.
Замечание. При доступе к SQL-серверным базам данных параметр PATH должен оставаться пустым, иначе ядро баз данных не сможет определить истинный путь к Вашей базе, и будет сгенерирована ошибка.
- Системная информация утилиты настройки BDE (BDECFG)
- 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” и укажем те переменные, которыми действительно можно управлять изменением системной информации.
(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]) и наличие лидирующих нулей.
- Установка драйверов 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-алиас создается стандартным способом, который мы рассмотрели выше.