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

Вниз

Русский текст в Delphi при использовании Interbase компонентов   Найти похожие ветки 

 
Garry_c   (2004-12-14 11:44) [0]

Мое приложение использует IBQuery и IBDataset для обмена информацией с БД-Interbase
Столкнулся с тем что хотя в IBExpert с русскими буквами проблем нет, однако при поытке изменить зачение полей из delphi выдается ошибка "Cannot transliterate between character sets"
Подскажите как исправить это проблему?
Спасибо.


 
stud ©   (2004-12-14 11:47) [1]

при подключении к базе данных из программы необходимо указать нужную кодовую страницу


 
HSolo ©   (2004-12-14 11:56) [2]

http://ibase.ru/devinfo/ibrusfaq.htm


 
PEAKTOP ©   (2004-12-14 17:38) [3]

Замечен такой глюк в InterBase 6.0.1 Windows и в его брате InterBase 6.0.2 LINUX SS. Глюк заключается в том, что если при создании домена в таблице определишь CHARACTER SET хотя бы в одном домене, и не укажешь тоже хотя бы в одном домене, то хоть ставь кодовую страницу при подключании, хоть не ставь, все равно вылетает  исключение.
Лечиться путем НЕ опеределения CHARACTER SET в доменах и таблицах и определении его при подключении в параметрах TIBDataBase. В параметрах подключения опередлять надо только из-за того, что сервак можеть крутиться под другой осью, чем клиент.
А по большому счету (опять же установлено методом научного тыка) InterBase по барабану CHARACTER SET при вставке или изменении данных, все равно серваку при этой операции пердается набор байт (то бишь кодов символов по таблице кодировки). Опеределние CHARACTER SET необходимо лишь для корректного отображения данных на клиенте.


 
Johnmen ©   (2004-12-14 17:56) [4]

>PEAKTOP ©   (14.12.04 17:38) [3]
>Опеределние CHARACTER SET необходимо лишь для корректного
>отображения данных на клиенте.

Вообще говоря, это не так. См. ссылку выше.


 
Garry_c   (2004-12-15 11:31) [5]

Господа! правлиьно ли я вас понял?
Если база данных уже создана с этой кодировкой win1251
эта же кодировка прописана хотябы в одной таблице
то всю базу заново пересоздавать придется?


 
Zacho ©   (2004-12-15 12:10) [6]

Garry_c   (15.12.04 11:31) [5]

Читать HSolo ©   (14.12.04 11:56) [2] до полного просветления


 
PEAKTOP ©   (2004-12-16 00:15) [7]

>> Johnmen ©   (14.12.04 17:56) [4]
>> Вообще говоря, это не так. См. ссылку выше.

Ссылку выше читал и не один раз. Я отнюдь не подвергаю сомнению слова авторов статей этого сервака, все-таки они основаны на фирменной документации, но есть пару приколов, установленных методом научного тыка.
Например, стоит у меня на одном клиенте WEB-интерфейс к отчетам по базе. Прикручено все на FireBird(1.5.1.4481)+Apache(2.0.42)+PHP(5.0). Система WEB отчетов построена так, что все отчеты храняться в базе в БЛОБ виде HTML-темплейтов, которые потом скриптовая машина переколбасит в форму вывода.

Из PHP-скрипта коннектимся

$ibconnection = ibase_pconnect("ws01:/database/database.gdb", "SYSDBA", "masterkey", "LC_CTYPE=WIN1251");
if($ibconnection!=0){
 $sql = "SELECT * FROM SYS_REPORTS ORDER BY REPORT_NAME ";
 $ibquery = ibase_query($ibconnection, $sql);
 .....
 }

Как видно из кода, при подключении я установил кодировку. Дальше моя скриптовая машина выполнит запрос, перколбасит отчет, и "выплюнет" наружу отчет в HTML. Естественно, когда страница выплевывается, я не забываю сказать броузеру клиента, что
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
Все корректно отображается.
Идем далее. Есть у меня возможность добавления в справочники новых элементов. Дык вот, когда отлаживал скрипт, забыл выкинуть броузеру клиента кодировку, и тот на месте решил, что ему лучше будет с KOI8R. Когда нажимаем на форме "Submit", PHP-скрипт коннектиться к базе приведенным выше способом и выполняет запрос на вставку данных. И в результате данные вставляются, но строки все "зюзиками", как сказала одна бухгалтер. Вставляю инструкцию PHP echo $name; (на Паскале WriteLn(name))перед вставкой данных. Надпись по русски. В базе тоже. Но в кодировке KOI8R. А вся база на WIN1251. Причем, PHP понимает, что ему передали строчку в кодировке KOI8R, правильно ее обрабатывает, правильно выводит даже если я потом заставлю его вывести броузеру другую кодировку,  а вот при вставке данных - "зюзики"
Что я забыл броузеру сообщить о кодировке, я допер сразу. Но отсюда сделал вывод, что при передаче параметров в InterBase API передается набор байт и интербейзу по барабану, что ты там вставляешьи в какой кодировке.
P.S. А вот если при подключении ни сказать кодировку, то все отчеты "зюзиками" пойдут. Опять же, установлено методом научного тыка.


 
Zacho ©   (2004-12-16 00:55) [8]

PEAKTOP ©   (16.12.04 0:15) [7]
Опеределние CHARACTER SET необходимо лишь для корректного отображения данных на клиенте.


Вот именно это и не так. Т.к. чарсет необходим в первую очередь для сортировки и преобразования регистра. А для корректного отображения и character set none вполне пригоден. Это уже от клиента зависит, как он отображать будет.


 
PEAKTOP ©   (2004-12-16 01:09) [9]

>> Zacho ©   (16.12.04 00:55) [8]

Насчет ORDER BY cогласен.


 
Zacho ©   (2004-12-16 01:17) [10]

PEAKTOP ©   (16.12.04 1:09) [9]

А насчет чего не согласен ? :)


 
PEAKTOP ©   (2004-12-16 01:22) [11]

У тебя ася есть ? а то модератор переместит ветку в "Потрепаться" :)) Мою смотри в профайле.


 
Zacho ©   (2004-12-16 01:32) [12]

PEAKTOP ©   (16.12.04 1:22) [11]

Я сейчас на диалапе. Подключился- скачал что надо - посмотрел форум - отключился :)

Так что аська у меня не запущена и даже не установлена :)

Заведи ветку в "потрепаться", если есть желание.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.035 c
14-1104385235
Маг Похмеляйнен
2004-12-30 08:40
2005.01.16
LOL - Поединок в стиле Matrix


14-1104272342
dmk
2004-12-29 01:19
2005.01.16
Купил недавно notebook Toshiba


3-1103010817
siriusk
2004-12-14 10:53
2005.01.16
SQL-сервера


1-1104831450
markers
2005-01-04 12:37
2005.01.16
Del в TListView


1-1103895082
XfroSt
2004-12-24 16:31
2005.01.16
как определить имя пользователя





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский