Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

Русский язык в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.036 c
2-1132527337
Dub
2005-11-21 01:55
2005.12.11
Редактирование файла


2-1132818133
VadimSpb
2005-11-24 10:42
2005.12.11
Проблема запроса


2-1132588345
psa247
2005-11-21 18:52
2005.12.11
VerQueryValue !


14-1132659255
gn
2005-11-22 14:34
2005.12.11
перевод с английского


1-1132078212
AntonXXX
2005-11-15 21:10
2005.12.11
Запуск процедуры из DLL при клике





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский