Arithmetic exception ... в запросе на выборку

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

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

Arithmetic exception ... в запросе на выборку

Сообщение bk_evgen » 16.09.2009 19:31:05

Делаю запрос на выборку из таблицы. В таблице есть поле типа varchar(100) WIN1251. Если в выборку попадает запись, у которой в значении данного поля стоит строка более чем из 50 русских букв, генерируется исключение Arithmetic exception, numeric overflow, or string truncation. Если в поле стоит короткая строка (менее 50 символов) то выборка работает.
Пробовал Zeos и fblib. Картина одна и та же.
Конфигурация: Win XP SP 3, firebird 1.5.5, lazarus 0.9.26.2.
Как можно выбирать такие записи?
bk_evgen
незнакомец
 
Сообщения: 2
Зарегистрирован: 16.09.2009 18:41:16

Re: Arithmetic exception ... в запросе на выборку

Сообщение Mr.Smart » 16.09.2009 23:05:20

А вы уверенны, что пишете в таблицу именно в кодеровке Win-1251? :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Arithmetic exception ... в запросе на выборку

Сообщение Attid » 17.09.2009 09:46:26

кодировку подключения поставь в юникод
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Arithmetic exception ... в запросе на выборку

Сообщение bk_evgen » 17.09.2009 10:24:47

Все разобрался. Действительно все из-за кодировок. Спасибо этому форуму.

При подключении у компонента ZConnection или у аналогичного из fblib поставил WIN1251 вместо UTF-8.
И потом в программе строковые данные из программы в базу кодирую функцией UFT8ToAnsi, из базы в программу AnsiToUTF8. Тогда компоненты Query исключение не дают при выборке длинных строк.

И еще если кто использует DBGrid, чтобы он отображал русские строки надо сделать такой обработчик

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
DBGrid1.Canvas.TextOut(Rect.left,Rect.Top + 1,AnsitoUTF8(column.Field.Text));
end;

это как раз было где-то тут на форуме. Ну и естественно подключение делать с параметром WIN1251, а не UTF8, дабы не нарваться на вышеописанный глюк.
bk_evgen
незнакомец
 
Сообщения: 2
Зарегистрирован: 16.09.2009 18:41:16


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru