Отображение полей БД IBM Informix в кодировке UTF-8 в DBGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Снег Север » 24.10.2019 10:42:15

Vadim писал(а):Снег СеверVodnik
Граждане, что-то меня напрягать стало, что вы мне приписываете слова, которые я не говорил. Нельзя ли быть повнимательнее?

???
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vadim » 24.10.2019 10:45:12

Надо ли это понимать, что свои сообщения Вы никогда больше не читаете принципиально?

Снег Север писал(а):
Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Снег Север » 22.10.2019 <Время должно быть Ваше>

Vodnik писал(а):
Снег Север, я не знаю где это посмотреть


У вас нет физического доступа к серверу? Там должны быть конфигурационнные файлы, где такое прописывается. Так я понял из беглого просмотра вики по IBM Informix.

Vadim писал(а):
А как это всё работает в идеале - Lazarus отображает кириллицу без дополнительных процедур конвертации?


В идеале настраивается 1) на сервере 2) в драйвере 3) в коннекшене, чтобы получать правильную кодировку. И Lazarus отображает в UTF8 любой текст на любом языке.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Снег Север » 24.10.2019 10:51:53

Один раз сбойнула "быстрая цитата" - вас это так ужасно оскорбило? Приношу свои извинения.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vadim » 24.10.2019 11:07:47

Снег Север писал(а):Один раз сбойнула

Когда было именно "один" - я это проигнорировал. Но это уже стало превращаться в систему, о чём я и сказал. Так что изображать непонимание не стоит... ;-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Снег Север » 24.10.2019 11:30:56

Ровно один раз - тут:
Vadim писал(а):
А как это всё работает в идеале - Lazarus отображает кириллицу без дополнительных процедур конвертации?

Но я уже принес извинение выше.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vodnik » 24.10.2019 13:17:25

Vadim писал(а):Снег СеверVodnik
Граждане, что-то меня напрягать стало, что вы мне приписываете слова, которые я не говорил. Нельзя ли быть повнимательнее?

Vadim, простите, исправил, не знаю, как такое могло получиться, я нажимал "Цитата"...

Добавлено спустя 36 минут 25 секунд:
Возвращаясь к сути вопроса...
Vadim писал(а):
Vodnik писал(а):Неужели в Lazarus нет более красивого решения?

А при чём тут Lazarus, если прямо, чуть ли не по русски, написано, что это ошибка ODBC? :D Я не знаю, где Вы брали свой драйвер ODBC, обычно в интернетах советуют скачивать самый наипослелний IBM Informix Client SDK. Как правило это никому не помогало, поэтому поддержку конкретно русских кодировок (любых русских, специально подчёркиваю!) вводили в исходник ODBC ручками. Но поскольку это было уже давненько, возможно буржуины это дело уже поправили. Так что заходите на ихний сайт, качайте самое новьё, ставьте пробуйте... ;-)

Поизучав сайты IBM Informix, я выяснил следующее (может, я не всё точно усёк, но вроде так):
- поддержку для UTF-8 и ряда других кодировок буржуины давно реализовали, но нужно соблюдать ряд условий:
- поля, содержащие текст в UTF-8, должны иметь тип данных NCHAR или NVARCHAR вместо CHAR и VARCHAR, только к ним применяется локаль
- локаль самой БД по умолчанию 819, т.е. без поддержки иностранных букв, должна быть сменена на UTF8
- если всё это соблюдать, то при соответствующей настройке драйвера ODBC отображение кириллицы должно работать автоматом и в Lazarus, и в WinSQL
- разработчики конкретно данной сущности БД игнорировали все эти требования (это БД используемая в продукте Колцентр)

Свежий ODBC драйвер у IBM вроде как платный (мой поставляется с продуктом), да и в свете всего сказанного он мне вряд ли поможет.
Так что не вижу иного пути, кроме как отказаться от преобразования c помощью ODBC и использовать обработчик onGetText в Лазарусе. Но тут мне мешает возникающее в Лазарусе (не в ODBC!) исключение:
"An invalid parameter was passed to SQLGetDiagRec/Field"
при обращении к SQLQuery1.Open.
Причём оно возникает лишь при некоторых значения Client Locale в ODBC, например, en-US.1252
Vodnik
новенький
 
Сообщения: 45
Зарегистрирован: 24.12.2016 01:14:23

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vadim » 24.10.2019 14:06:52

Vodnik писал(а):поля, содержащие текст в UTF-8, должны иметь тип данных NCHAR или NVARCHAR вместо CHAR и VARCHAR, только к ним применяется локаль

Кстати, у MS SQL точно такая же проблема. Если в типе буквы N нету, ничего неанглийского прочитать не удасться.
Vodnik писал(а):An invalid parameter was passed to SQLGetDiagRec/Field

Вот прямо один-в-один как у меня было с MSSQL... :D Пришлось, несколько помучавшись, скомпилировать свежайший нативный драйвер-библиотеку (стороннюю, опенсорсную) для MSSQL и такие проблемы исчезли сразу и навсегда. ;-)
Увы, не знаю, есть подобная штука для Informix, но могу посоветовать Вам работать не через ODBC, а через OLE DB. Он будет помоложе и несколько поинтеллектуальнее. Проблема будет та же - есть ли для OLE DB драйвер. Вам нужно посмотреть тот комплект, что есть у Вас. С OLE DB работает лазарусовская библиотека ZEOS, но, сами понимаете, только в винде. Если возникнет необходимость импортозамещаться, то работать ничего не будет.

Добавлено спустя 1 минуту 54 секунды:
Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DBGrid
Vodnik
Я забыл, у Вас какая версия Informix?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vodnik » 24.10.2019 14:46:25

Вот не ожидал таких сложностей, когда начинал этот проект :(
Vadim писал(а):Вот прямо один-в-один как у меня было с MSSQL...

Ну, согласитесь, это же баг Лазаруса, который по-любому нужно как-то решать...
Vadim писал(а):Я забыл, у Вас какая версия Informix?

У меня 12.10.TC7W1, актуальная сейчас уже 14
Vodnik
новенький
 
Сообщения: 45
Зарегистрирован: 24.12.2016 01:14:23

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Снег Север » 24.10.2019 14:53:04

Vodnik писал(а):это же баг Лазаруса, который по-любому нужно как-то решать

Если баг Лазаруса, то надо писать разработчикам. Но без примера с воспроизведением ошибки, они вряд ли что-то сделают. А пример с доступом к вашей базе, понятно, вы не можете предоставить. Так что - засада...

Добавлено спустя 4 минуты 14 секунд:
Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DBGrid
OLE DB драйвер, вроде бы, тоже должен поставляться с продуктом.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vadim » 24.10.2019 15:02:29

Vodnik писал(а):Ну, согласитесь, это же баг Лазаруса, который по-любому нужно как-то решать...

Ну, допустим... А тогда как объяснить тот факт, что эта ошибка, которая была у меня с MSSQL, сама собой исправилась, когда я скомпилировал новый драйвер? Код в своей программе я, при этом, не менял... ;-)
Vodnik писал(а):У меня 12.10.TC7W1

Попробуйте клиента отсюда скачать. Он поновее, вдруг поможет...
https://www.ciscounitytools.com/Applica ... xODBC.html

It's best to install ODBC, .NET and the GLS components from the client install below.

GLS - это как раз то, что имеет отношение к языковой проблеме.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vodnik » 24.10.2019 16:49:59

Снег Север писал(а): Если баг Лазаруса, то надо писать разработчикам. Но без примера с воспроизведением ошибки, они вряд ли что-то сделают. А пример с доступом к вашей базе, понятно, вы не можете предоставить. Так что - засада...

Да, надо самому отлаживать код Лазаруса, я в этом не очень...
Снег Север писал(а):OLE DB драйвер, вроде бы, тоже должен поставляться с продуктом.

С Колцентром - только ODBC...
Vadim писал(а):Ну, допустим... А тогда как объяснить тот факт, что эта ошибка, которая была у меня с MSSQL, сама собой исправилась, когда я скомпилировал новый драйвер? Код в своей программе я, при этом, не менял...

Процедура SQLGetDiagRec используется для получения диагностических записей об ошибке... Хотя, видимо, Вы правы; эта же ошибка возникала у меня при запросе неподдерживаемого Лазарусом типа данных INTERVAL.

Другие драйверы попробую, чем чёрт не шутит...

GLS - это API, ничего себе путь для решения проблемы

Добавлено спустя 1 час 28 минут 50 секунд:
Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DBGrid
Заработало!!!
Случайно обнаружил, что если выставить в ODBC драйвере точно такую же клиентскую локаль, как и в БД (т.е. en_US.819), то Лазарус вдруг стал отображать кириллицу!
Как, почему? Ведь всё ж неправильно сделано в БД!
dbgrid.png

odbc-2.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Vodnik
новенький
 
Сообщения: 45
Зарегистрирован: 24.12.2016 01:14:23

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vadim » 24.10.2019 18:45:50

Vodnik писал(а):Случайно обнаружил, что если выставить в ODBC драйвере точно такую же клиентскую локаль, как и в БД (т.е. en_US.819), то Лазарус вдруг стал отображать кириллицу!

Судя по рисунку - не ту же. ;-) Возможно в клиенте должна быть та локаль, которая понимается ОС. А Вы именно такую и поставили - en_US.8859-1. Хотя могу и ошибаться... :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vodnik » 24.10.2019 19:01:35

819 тоже работает
Vodnik
новенький
 
Сообщения: 45
Зарегистрирован: 24.12.2016 01:14:23

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Снег Север » 24.10.2019 20:31:33

Vodnik писал(а):819 тоже работает

Это то, о чём я писал - русские символы пересылаются без преобразований в драйвере, а винда отображает верно благодаря настройки локали.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DB

Сообщение Vodnik » 25.10.2019 00:31:32

Снег Север писал(а):
Vodnik писал(а):819 тоже работает

Это то, о чём я писал - русские символы пересылаются без преобразований в драйвере, а винда отображает верно благодаря настройки локали.

Почему-то это не помогает таким инструментам как WinSQL и ODBC Query Tool - они не могут отобразить кириллицу корректно, работая с той же БД через тот же ODBC драйвер.
Попробую завтра поменять локаль, посмотрим...

Добавлено спустя 11 часов 15 минут 25 секунд:
Re: Отображение полей БД IBM Informix в кодировке UTF-8 в DBGrid
Установил в Windows 7:
Format: English (United States)
Current location: United States
Display language: English
Current language for non-Unicode programs: English (United States)
И что Вы думаете?.. Написанное на Лазарусе приложение продолжает прекрасным образом отображать кириллицу в полях из БД!
Как мне казалось, я начал было понимать, почему отображение кириллицы НЕ МОГЛО работать.
Но почему оно сейчас работает...
ODBCConnection1.CharSet не установлен.
Лазарус эвристическим путём определил, что в поле - UTF-8?
Vodnik
новенький
 
Сообщения: 45
Зарегистрирован: 24.12.2016 01:14:23

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 36

Рейтинг@Mail.ru