Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.04 c
2-1132795777
SkyRanger
2005-11-24 04:29
2005.12.11
CallBack


14-1132522353
SerJaNT
2005-11-21 00:32
2005.12.11
ACPI


11-1113242445
alex_s
2005-04-11 22:00
2005.12.11
jcl debug


2-1132550083
Alex7
2005-11-21 08:14
2005.12.11
"DBLookupComboBox".


14-1132305664
pupkin
2005-11-18 12:21
2005.12.11
Подскажите компоненты для наведения красоты