Наиболее удобным и естественным способом настройки BDE для работы с конкретным приложением является использование утилиты BDE Administrator (bdeadmin.exe).

Стартуем BDE Administrator. Получаем окно, показанное на рис. 8.4.

Главное окно администратора баз данных

Рис. 8.4. Главное окно администратора баз данных.

Выбираем пункт меню Object, подпункт New (то же самое можно сделать и другими способами, но, чтобы не загромождать описание, ограничимся одним).

Получаем окно с заголовком New Database Alias. В нем выбираем из предлагаемого списка драйверов (Database Driver Name) драйвер для InterBase - INTRBASE. Нажимаем ОК. Получаем новое окно (рис. 8.5).

Окно настройки баз данных администратора баз

Рис. 8.5. Окно настройки баз данных администратора баз.

Вводим имя для алиаса, в нашем случае - вместо INTRBASE1. Например, TESTLIBR. В окне справа вводим в поле SERVER NAME фактический путь доступа к базе данных. В поле USER NAME указываем имя пользователя. Нажимаем на голубую стрелку - Apply. Описание базы создано.

Теперь можно открыть базу. Для этого щелкаем мышью на знаке '+' перед именем алиаса. Вводим имя пользователя и пароль. Соединение с базой выполнено. Еще раз выберем пункт меню Object.

Теперь можно перейти к работе с базой, вызвав, например, диспетчер серверов - пункт меню Server Manager или утилиту для работы с базой данных WinSQL для InterBase 5 или IBConsole для InterBase 6, далее пункт меню для работы с ISQL.

На этом, собственно, заканчивается создание алиаса. Приложение уже может работать с базой данных, используя алиас.

Настройка BDE на работу с кириллицей Теперь несколько слов о настройке BDE для поддержки работы с кириллицей.

В процессе работы средства BDE читают или пишут данные из базы. При этом при необходимости производится перекодирование данных.

Внутри Windows-приложения символьные данные хранятся в текущей кодировке, для русскоязычных приложений - 1251.

Итак, если мы имеем, например файлы DBF в кодировке DOS 866, то для их штатного прочтения необходимо ее задать. Для этого надо войти в BDE Administrator в подменю Configuration, выбрать Native, DBASE и задать LANGDRIVER dBASE RUS cp866. В этом случае производится перекодирование данных как при чтении, так и при записи, таким образом можно «забыть», что на диске данные хранятся в кодировке DOS, а в приложении - в кодировке Windows. Но в данном случае сами файлы не содержат информации об используемой кодовой странице.

При работе с InterBase ситуация усложняется тем, что и внутри InterBase хранится информация об используемой кодовой странице. Рассмотрим следующие варианты и возникающие в них проблемы.

В InterBase задано CHARACTER SET NONE

Здесь возможны 2 случая.

Вариант 1.

В BDE не указан LANGDRIVER (поле пусто).

В этом случае перекодировка данных при чтении и записи не производится. При работе с InterBase никаких проблем не возникает.

Теперь читаем данные из файла DBASE (LANGDRIVER dBASE RUS cp866) в приложение. Данные перекодируются. Далее из приложения записываем построчно в InterBase (NONE). Перекодировки не происходит. Записано все правильно и в нужной нам кодировке.

Теперь проделываем то же самое, но в один прием, используя локальный SQL.

Пусть файл FILET.DBF в директории E:\userdos содержит два символьных поля: ТХТ1 и ТХТ2.

Создадим в нашей базе таблицу TABL1.

CREATE TABLE SPLAV (

ТХТ1 VARCHAR (5),

TXT2 VARCHAR(45));

Тогда данные из файла DBASE - FILET.DBF в нашу таблицу можно поместить с помощью средств локального SQL BDE в нашу базу следующей командой.

insert into TESTLIBR:TABL1"(TXT1, TXT2)

select cast(TXTl as varchar(5)), cast(TXT2 as varchar (45) ) from 'E:\userdos\FILET.DBF'

Промежуточного перекодирования теперь нет, данные попали в базу, но вместо кириллицы появились #.

Таким образом, прямая запись в данной ситуации невозможна.

То же можно сказать и о выгрузке данных из базы.

Вариант 2.

В BDE указан LANGDRIVER Pdox ANSI Cyrillic. Это соответствует кодировка WIN 1251.

При обращении к базе получаем сообщение:

General SQL error.

arithmetic exeption, numeric overflow, or string truncation Cannot transliterate character between character sets.

Проще говоря, этот вариант непригоден. BDE не умеет выполнять перекодировки с NONE.

В InterBase задано CHARACTER SET WIN 1251.

Здесь возможны 2 случая.

Вариант 1.

В BDE не указан LANGDRIVER (поле пусто).

Проведем те же манипуляции, что и раньше.

Чтение из базы прошло, поскольку при чтении перекодировки нет. Запись идет из NONE в WIN 1251 - BDE этого не умеет.

Прямая запись также не прошла. Здесь перекодировки DOS 866 -NONE - WIN 1251 результат тот же, что и при установке в базе кодовой таблицы NONE. Этот вариант также непригоден.

Вариант 2.

В BDE указан LANGDRIVER Pdox ANSI Cyrillic. Это соответствует кодировка WIN 1251.

Чтение из базы прошло, поскольку кодовые страницы совместимы.

Записи, как в построчном режиме, так и с помощью SELECT прошли правильно. DOS 866 - Pdox ANSI Cyrillic - WIN 1251.

Возникают ли здесь какие-либо проблемы. Увы, да. Если посмотреть системные таблицы, то можно увидеть, что в них явно указана кодовая таблица character set UNICODE_FSS. Для приложений, это не беда, но, если нужно пользоваться утилитой SQL Explorer, то при попытке просмотра списка таблиц базы он выдаст сообщение, которое мы уже видели: Cannot transliterate character between character sets. Связано это с тем, что для получения этого списка SQL Explorer пытается читать системные таблицы, а они как раз «не в той кодировке». Беда, конечно не так велика, но к ней нужно быть готовым.

Подведем итоги.

Получить возможность работы с русскими буквами в базе данных можно двумя способами.

Первый способ является более простым. При создании базы данных DEFAULT CHARATER SET ни для базы данных, ни для символьных полей не указывается. В BDE в поле параметра LANGDRIVER задаем значение пусто. В этом случае в БД можно записывать символы в любой кодировке.

При таком способе единственной проблемой при работе с базой данных является то, что при сортировке данных сначала пойдут прописные буквы, а потом строчные. Для сортировки вне зависимости от регистра нужна UDF типа RUPPER. Занесение данных из внешних таблиц следует делать построчно.

Другой способ предполагает задание при создании БД дополнительного параметра DEFAULT CHARACTER SET WIN 1251.

При работе с использованием BDE необходимо выполнить его настройку. Удобнее всего воспользоваться утилитой администратора баз данных (bdeadmin.exe), описанной выше. Для этого достаточно на страничке System для драйвера INTRBASE (чтобы потом не делать то же самое каждый раз при создании нового псевдонима) или для псевдонимов INTRBASE установить параметр LANGUAGE DRIVER = Pdox ANSI Cyrillic.

При установке кодировки WIN1251 collation устанавливается по умолчанию также в WIN 1251, сортировка текстов (так же, как и при первом способе) будет выполняться по возрастанию кодов символов. Для обеспечения сортировки независимо от регистра необходимо при описании доменов (полей таблиц) или непосредственно в конструкции команды SELECT после имени поля в ORDER BY указать collate PXW_CYRL.

Рассмотрим результаты сортировок на примерах.

Пример 8.1

CREATE TABLE TAUTH0R1 (

AUTHOR PRMKEY,

AUNAME VARCHAR(60) COLLATE PXW_CYRL, COMMENT VARCHAR(80),

);

Зададим следующие значения.

Таблица. 8.1. Содержимое таблицы TAUTHOR1 для примера 8.1

AUTHOR AUNAME COMMENT
19 Дашкова Полина Первый
20 Хмелевская Иоанна второй
21 Ладыжинская Ольга Александровна Третий
22 Бурова И.И. четвертый
24 без авторов Пятый

Применим команду:

Пример 8.2

select * from tauthor order by AUNAME;

Результат представлен в табл. 8.2.

Таблица 8.2. Результат выборки с сортировкой при наличии опции COLLATE

AUTHOR AUNAME COMMENT
24 без авторов Пятый
22 Бурова И.И. четвертый
19 Дашкова Полина Первый
21 Ладыжинская Ольга Александровна Третий
20 Хмелевская Иоанна Второй

Сортировка выполнена по 2 столбцу, причем регистр текста не учитывается.

Теперь выполним такую же операцию, но по третьему столбцу, ' по которому COLLATE не задана.

Ппимеп 8.3

select * from tauthor order by COMMENT;

Таблица 8.З. Результат выборки с сортировкой при отсутствии опции COLLATE

AUTHOR AUNAME COMMENT
19 Дашкова Полина Первый
24 без авторов Пятый
21 Ладыжинская Ольга Александровна Третий
20 Хмелевская Иоанна второй
22 Бурова И.И. четвертый

Здесь также выполнена сортировка, но уже только по возрастанию кодов символов, а это означает, что вначале идут прописные буквы, а уже потом строчные.

Чтобы провести сортировку, аналогичную первой, достаточно сделать следующее.

Ппимеп 8.4

select * from tauthor order by COMMENT COLLATE PXW_CYRL;

Таблица 8.4. Результат выборки с сортировкой с опцией COLLATE в запросе

AUTHOR AUNAME COMMENT
20 Хмелевская Иоанна Второй
19 Дашкова Полина Первый
24 без авторов Пятый
21 Ладыжинская Ольга Александровна Третий
22 Бурова И.И. четвертый

В ' списке : кодировок Borland : InterBase < есть : еще > одна' русскоязычная- -CYRL (866), соответствующая кодировке в DOS, однако : ее лучше не использовать, поскольку это немедленно приведет либо к проблеме со шрифтами в приложении, либо к необходимости в постоянной перекодировке данных. Тем более что какой-либо необходимости в этом не видно, разве что при использовании старых баз, созданных в DOS. Но и в этом случае проще перекодировать их при перемещении в InterBase.

Следует, правда, отметить, что собственно утилиты BDE не всегда корректно ведут себя с упомянутыми кодировками, особенно, если необходимо одновременно работать с базами InterBase и локальными таблицами Paradox или dBASE. В этом смысле работа без явного указания CHARACTER SET предпочтительнее. На сегодняшний день здесь не возникает никаких проблем.

Назначение bde и организация связи с ним | Введение в InterBase | 8.4. управление доступом к данным


Введение в InterBase



Новости за месяц

  • Август
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс