"???" вместо русских букв (база данных FB, WIN1251)

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

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

"???" вместо русских букв (база данных FB, WIN1251)

Сообщение 62mkv » 27.03.2010 15:33:09

вроде долго искал на форуме но прямого пути так и не нашел, решил задать вопрос чтобы развеять сомнения...

итак, при работе с БД Firebird, чей чарсет - WIN1251, все компоненты которые работают с БД (DBGrid, DbText, DBEdit) отображают русские символы как ???
хотя свойство Charset компонента TIBConnection выставлено в WIN1251

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

функций перекодировки нашел на форуме много, но куда и как их применить для данной задачи - пока что-то не пойму..
62mkv
новенький
 
Сообщения: 10
Зарегистрирован: 27.03.2010 14:41:16
Откуда: Барнаул

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение Brainenjii » 27.03.2010 15:41:56

Выставьте Charset у TIBConnection в UTF8
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение 62mkv » 27.03.2010 19:33:44

теперь исключение происходит (см. вложение)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
62mkv
новенький
 
Сообщения: 10
Зарегистрирован: 27.03.2010 14:41:16
Откуда: Барнаул

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение eevee » 27.03.2010 19:45:53

По идее должно быть UTF-8
eevee
новенький
 
Сообщения: 63
Зарегистрирован: 29.12.2009 17:52:44
Откуда: Саратов

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение 62mkv » 28.03.2010 13:55:06

ровно тоже самое
У вас нет необходимых прав для просмотра вложений в этом сообщении.
62mkv
новенький
 
Сообщения: 10
Зарегистрирован: 27.03.2010 14:41:16
Откуда: Барнаул

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение Vadim » 28.03.2010 16:21:40

62mkv
Тогда попробуйте поставить в свойстве CharSet то, что Вы поставили при создании БД. Если Вы там не ставили ничего, значит FB, видимо, не может правильно определить кодировку и её нужно задать (в самой БД, при создании) напрямую.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение 62mkv » 28.03.2010 16:41:54

вот как выглядит дамп Extract Metadata в IBExpert:

SET SQL DIALECT 3;

SET NAMES WIN1251;

CREATE DATABASE 'YMKM:C:\Develop\ezTask\Db\ezt1.fdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET WIN1251;

как раз WIN1251 я и задавал в поле CharSet изначально, и именно такое значение и приводит к ??? вместо русских (только русских) символов ! цифры и латиница отображаются нормально.
62mkv
новенький
 
Сообщения: 10
Зарегистрирован: 27.03.2010 14:41:16
Откуда: Барнаул

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение Vadim » 28.03.2010 17:48:41

62mkv
А какая у Вас версия FireBird?
Попробуйте ещё такой вариант: после соединения с БД, но перед открытием таблиц сделать:
Код: Выделить всё
IBConnection.ExecuteDirect('SET NAMES UTF8');
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение 62mkv » 28.03.2010 18:27:38

теперь такая ошибка (см. вложение)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
62mkv
новенький
 
Сообщения: 10
Зарегистрирован: 27.03.2010 14:41:16
Откуда: Барнаул

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение dunin » 28.03.2010 20:06:12

62mkv, c IBExpert работали?

Если "да", то тогда пошагово:
- Цепляем БД в IBExpert;
- Выгоняем метаданные + просто данные в скрипт;
- Правим скрипт, меняя чарсет (DEFAULT CHARACTER SET UTF8);
- Правим в скрипте имя файла базы данных;
- Жмакаем "выполнить";
- открываем вновь созданную БД в своем приложении в lazarus. Все должно заработать. Даже чарсет в инспекторе объектов ставить не придется (вроде... могу ошибаться... перевел все свое на UIB компоненты).

Одно "но". До нажатии в IBExpert кнопки "выполнить" (скрипт) надо правильно поставить кодировку. То ли ANSI, то ли UTF8. По логике UTF8, а по памяти, вроде ANSI. Ну... можно и так и так попробовать - как-нибудь да получится. :?

Смысл всех манипуляций - перевести БД и ВСЕ данные в оной на правильную кодировку. Тогда все как надо заработает. И в Lazarus и где угодно.

Грабли: во вновь создаваемой БД длину текстовых полей надо увеличить ровно в два раза (опять же предварительно подправить скрипт). Например если было поле VARCHAR 16, то сделать VARCHAR 32.

Добавлено спустя 11 минут 13 секунд:
62mkv писал(а):вот как выглядит дамп Extract Metadata в IBExpert:
....

Ага, значит работали. Ну я спокоен - все получится. Удачи. 8)
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение Vadim » 29.03.2010 02:48:15

62mkv
Vadim писал(а):А какая у Вас версия FireBird?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение 62mkv » 29.03.2010 19:12:04

FB 1.0.3

переводить БД в UNICODE не могу - с ней же куча других приложений работает, я их не могу модифицировать.

Добавлено спустя 5 минут 45 секунд:
собственно одна из задач проекта - оценить перспективность Лазаруса как среды в сторону которой стоит двигаться от устаревающего Delphi 7...

пока весы склоняются совсем не в пользу Лазаруса ;((

задача выглядит элекментарной, тем не менее ни одного толкового совета так и не получил (отконвертировать базу это не решение проблемы, это уход от нее. согласен, могло бы и прокатить но не в этом случае увы)
62mkv
новенький
 
Сообщения: 10
Зарегистрирован: 27.03.2010 14:41:16
Откуда: Барнаул

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение Brainenjii » 29.03.2010 20:02:04

1.0.3 0.o Ого ^_^ Попробуйте UNICODE_FSS или UNICODE-FSS... А лучше всего - обновите базу... А дальше как уже было предложено - UTF8/UTF-8

P.S. Просто Lazarus достаточно быстро развивается... И некоторые другие продукты смежные, как ни печально, остаются за бортом... Вот IE6 взять, к примеру - когда-то был на вершине олимпа, сейчас какая-нибудь ExtJS его не поддерживает практически... Вина ли это ExtJS? ^_^

P.P.S. - после обновления FP хотя бы до 1.5 переписывать другие приложения не потребуется. Просто сама база будет знать об UTF8 и сама на лету будет конвертировать данные из формата в формат (блобы не считаются ^_^)

P.P.P.S. Кроме того, даже на http://www.firebirdsql.org/ предупреждают, что firebird 1.0.3 не поддерживается. Так что глобальней и надёжней будет обновиться ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение dunin » 29.03.2010 20:23:11

62mkv писал(а):FB 1.0.3

переводить БД в UNICODE не могу - с ней же куча других приложений работает, я их не могу модифицировать.
...

Понятно. Тогда поиском по форуму на предмет "как-то убрать UTF8" или вроде того... Не спешите сразу "убивать UTF8" - дочитайте ветку до конца.

62mkv писал(а):...отконвертировать базу это не решение проблемы, это уход от нее....

Ну... Хозяин-барин... По мне, так отказ от конвертации как раз и есть уход от проблемы, а не решение. Как уже слегка обмолвился Brainenjii, именно юникод и есть родной формат для FB. Помню времена, когда в статьях про программирование совершенно серьезные дядьки совершенно серьезно писали что-то вроде "и для чего придумали эту 1251, есть же 866"? Где теперь 866?
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: "???" вместо русских букв (база данных FB, WIN1251)

Сообщение Padre_Mortius » 29.03.2010 20:51:04

Полностью согласен с Brainenjii. Для начала стоит обновить ядро базы до 1.5. Обновление делается через создание резервной копии на старой версии и восстановления базы уже на новой.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru