Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизРусский язык в 16-ти разрядном InterBase Найти похожие ветки
← →
solenko © (2005-10-27 11:10) [0]Здравствуйте!
Проблемма в следующем -- есть приложение, написанное на 16-ти разрядніх делфях, работающее с InterBase. При переносе приложжения на Win3.11 я не смог подключить русскую кодировку.
Сервер при этом "не знает" кодировки cp866, а BDE -- WIN1251 (сервер ее понимает).
При установке кодировок BDE: cp866, InterBase: WIN1251 данные добавляются в без ошибок, но при попытке выборки выдается ошибка -- "Ошибка преобразования кодовой страницы" (или что-то в этом роде).
Как со всем этим справиться?
← →
Виталий Панасенко (2005-10-27 12:26) [1]Языковый драйвер - pxw_cyrl
"Для того, чтобы из ISQL или WISQL можно было работать с русскими буквами
необходимо перед Connect сделать установку на кодировку WIN1251 (SET
NAMES WIN1251 для ISQL, Session -> Advanced Settings... -> Character Set
для WISQL) при условии, что в InterBase при создании базы также установлен
Character set WIN1251.
Для того, чтобы в символьные поля в базе на InterBase 4.0 можно было вводить
русский текст, необходимо для этих полей при создании таблицы определить
CHARACTER SET WIN1251. По умолчанию этому CHARACTER SET ставится в
соответствие COLLATION ORDER WIN1251. Но с COLLATION ORDER WIN1251 не
работает ф-ция UPPER. Для CHARACTER SET WIN1251 существует еще COLLATION
ORDER PXW_CYRL, с которым ф-ция UPPER работает правильно, равно как и другие
операции, связанные с сортировкой или перекодировкой (которые собственно
и используют COLLATION ORDER). По-этому рекомендуется при создании таблицы
для символьных полей с CHARACTER SET WIN1251 использовать COLLATION ORDER
PXW_CYRL:
CREATE TABLE table1 (
field1 VARCHAR(20) NOT NULL CHARACTER SET WIN1251 COLLATE PXW_CYRL,
...);
"
← →
Виталий Панасенко (2005-10-27 12:30) [2]
> 1.16 Работает-ли Local InterBase в Delphi 2.0 с русскими
> буквами ?
>
> Да, как в Delphi 1.0, так и в Delphi 2.0. Для того, чтобы
> в БД в
> строковых полях использовались русские буквы, необходимо
> при
> создании БД указать в качестве дополнительного параметра
> фразу:
>
> DEFAULT CHARACTER SET WIN1251
>
> А в BDECFG32 в драйвере InterBase и его псевдонимах (aliases)
> указать языковый драйвер Pdox ANSI Cyrillic. Такие установки
> обеспечат нормальную работу с кодировкой 1251.
>
> Дополнительно, если вы предполагаете использовать выражение
> UPPER в
> SQL запросах, то Вам потребуется при создании таблиц InterBase
> использовать уточнение COLLATION SEQUENCE для строковых
> полей.
>
> К сожалению, установить COLLATE PXW_CYRL по умолчанию для
> базы
> данных невозможно (такой параметр отсутствует). Поэтому
> таблицы
> InterBase, созданные при помощи Database Desktop или компонента
> TTable не будут иметь правильного COLLATE для работы с
> функцией SQL
> UPPER. (Эта проблема, необходимо отметить, не относится
> к работе с
> регистром русских букв внутри Delphi, поскольку для этого
> внутри VCL используются функции Windows, правильно переводящие
> буквы
> кодировки 1251 в верхний регистр и обратно.)
>
> Например, если возможен запрос такого типа:
> SELECT * FROM CUSTOMERS
> WHERE UPPER(NAME) = "ИВАНОВ"
>
> То таблицу CUSTOMERS придется создавать при помощи текста
>
> CREATE TABLE CUSTOMERS (
> ID INTEGER NOT NULL,
> NAME CHAR(30) COLLATE PXW_CYRL,
> PRIMARY KEY (ID))
>
> фраза COLLATE PXW_CYRL заставляет InterBase использовать
> таблицу
> трансляции символов PXW_CYRL вместо WIN1251 (которая устанавливается
> по умолчанию для DEFAULT CHARACTER SET WIN1251).
>
> Однако можно использовать указание порядка сортировки "на
> ходу", без
> указания порядка сортировки в описании таблицы - при помощи
> того-же
> спецификатора COLLATE. В этом случае запросы могут выглядеть
> следующим образом:
>
> SELECT * FROM CUSTOMERS
> WHERE UPPER(NAME COLLATE PXW_CYRL) = "ИВАНОВ"
>
> Учтите, что если Вы используете ORDER BY NAME, то порядок
> записей
> у полей с COLLATE PXW_CYRL будет отличаться от имеющих
> только
> CHARACTER SET WIN1251. В этом случае необходимо и в ORDER
> BY
> указывать COLLATE. Например
>
> SELECT * FROM CUSTOMERS
> WHERE UPPER(NAME COLLATE PXW_CYRL) = "ИВАНОВ"
> ORDER BY NAME COLLATE PXW_CYRL
>
> Проблемы с созданием БД с кодировкой WIN1251 могут быть
> если у
> Вас бета-версия Delphi. Еще одна причина - пробелы в имени
> каталога,
> в котором находятся файлы локального InterBase.
>
> примечание: при создании псевдонимов в Database Desktop
> языковый
> драйвер называется "ancyrr".
>
> примечание: ODBC-драйвер InterBase фирмы Q+E, входящий в
> поставку
> Delphi 1.0, не может работать с кодировкой WIN1251, так
> как не имеет
> параметра SortOrder (как например ODBC-драйвер Access).
> В
> результате, при работе с этим драйвером через BDE русские
> буквы
> будут видны (благодаря LangDriver Pdox Ansi Cyrillic),
> но ввести их
> не удастся. Для приложений, работающих с ODBC напрямую,
> русские
> буквы будут видны как бессмысленный набор символов.
> В настоящее время ожидается новый 32-разрядный ODBC драйвер,
> в
> котором эти проблемы, мы надеемся, будут решены.
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.034 c