Интересный баг SQLQuery

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

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

Интересный баг SQLQuery

Сообщение miraj_mv » 09.11.2012 12:14:31

Нашел интересный баг SQLQuery, на некоторых полях при выборке из базы Postgres 8.4 обрезает некоторое количество символов пока заметил только на полях varchar. То есть если поле например 8 символов то Лазарус читает и отображает только 6 символов. Самое интересное что не все поля обрезает.
Lazarus 0.9.30.4 r35940 FPC 2.6.0 i386-win32-win32/win64. Пробовал также и на Лазарусе 1.0.2 тоже самое. Что это и как его победить?
miraj_mv
незнакомец
 
Сообщения: 3
Зарегистрирован: 08.11.2012 14:56:49

Re: Интересный баг SQLQuery

Сообщение Climber » 09.11.2012 18:12:16

Это не баг, это фича. Старая, как мир. Способов решения - несколько. Это происходит с юникодными символами. Попробуйте создать поле типа varchar (он вроде character varying назывался там, не?) размером 2 символа и записать туда первый символ - латинскую букву, а второй - русскую. Будет еще веселее :wink:
Простейший способ решения проблемы - удвоить размер всех полей такого типа в БД. Способ более правильный (тут кто-то писал несколько лет назад) - в каком-то из системных что ли модулей подправить одну константу, а потом пересобрать fpc. Только где, какую и какие будут побочные эффекты (какие-то вроде будут) - я не помню.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Интересный баг SQLQuery

Сообщение stikriz » 09.11.2012 19:57:45

Climber писал(а):Это происходит с юникодными символами.

Потому, что надо использовать TWideStringField. Попробуйте создать с помощью Ins вручную в редакторе полей. Если по умолчанию создается TStringField, то это баг в либе. У конекта есть метод AddFieldDefs. Не знаю как сделали у постгри, но обычно там вызывается что-то вроде TranslateFldType, там в зависимости от типа поля, которое возвращает СУБД подставляется тип филды. Бага где-то там.

Добавлено спустя 4 минуты 54 секунды:
И еще. У нормальных СУБД обязана быть такая фича - должна быть возможность указать кодировку с которой хочет работать клиент. Если, например, база юникодовская, а я хочу работать с win1251, то где-то в параметрах подключения я должен иметь возможность указать кодировку win1251. И тогда все запросы посылать, и все строки получать я буду в этой кодировке. Уверен, что постгри имеет такую фичу. Например, FireBird всегда так мог.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru