Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что за ошибка такая? [D5, IB4.x]


diww ©   (2002-05-28 15:37:00) 

EDBEngineError: General SQL Error: arithmetic exception, numeric overflow or string truncaction. Cannot transliterate character between character sets.
Происходит во время Query.Open. В запросе - select .. from .. where .. order. В Query есть несколько вычисляемых полей. Когда-то давно все работало. Сейчас пробовал на 2-х компах - выдает эту ошибку. Если удалить все поля в Query ошибка остается.
Как с этим бороться?


Val   (2002-05-28 19:15:00) [1]

а может дело в неверно указанной кодировке?


Praco   (2002-05-28 18:09:00) [2]

Johnny Smith © (28.05.02 17:17)
Прав, однозначно.
Например, одно из полей в select, типа char(20)
преобразовывается в cast(field as char(10))
Если есть поля реально длинее 10 - будет ошибка. Если нет - запрос пройдет. SQL Explorer такие записи (>10) не покажет, WISQL - даст ошибку. В IB старше 4.21 не проверял.
Иногда эта ошибка выскакивала у меня при непонятных сбоях IB(похоже, сетка глючила).

diww (28.05.02 17:58)
Возможно, поля разных типов - char, varchar


diww   (2002-05-28 17:58:00) [3]

Разобрался в чем причина проблемы.
Возникает она ещё на стадии создания одной из View. При попытке ее просмотра через SQL Explorer появляется то же сообщение.
В View есть поле задаваемое как обьединение нескольких полей бд (field1 || field2 || field3). Если убрать одно из этих полей, то вьюшка нормально создается (а прорамма дальше работает криво). Так что, наверное, Johnny Smith © (28.05.02 17:17) прав насчет длин переменной.
Но раньше как-то ведь работало (Давно и на другом компе). Наверное, можно как-то настроить максимальный размер поля?
Подскажите, плиз!


Johnmen   (2002-05-28 17:45:00) [4]

>Johnny Smith © (28.05.02 17:30)

В курсе....Да только автор об этом не упоминал....
(И вообще, не надо мне выкать - не люблю...:))))


Johnny Smith   (2002-05-28 17:30:00) [5]

А вы не в курсе, что в IB обращение к SP также может идти через select?


Johnmen   (2002-05-28 17:22:00) [6]

>Johnny Smith ©

Если быть чуточку внимательней, то в вопросе указан select ...


Johnny Smith   (2002-05-28 17:17:00) [7]

IB возвращает такую ошибку, когда идет попытка поместить некое значение в переменную меньшей длины. Я в свое время сталкивался с ней, когда в хранимой процедуре переменной, скажем, строковой с длиной в 30 символов присваивалось значение поля длиной в 50 символов (Varchar). Причем если оно было меньше или равно 30 симв., то все проходило на "ура", что не позволило "с лету" разобраться в ситуации.


Nikolay M.   (2002-05-28 17:02:00) [8]

А текст запроса из SQL Explorer выполняется? Если да, то действительно пересоздай Query, если нет, коцай текст запроса до тех пор, пока не заработает...

ЗЫ
по-моему, надежнее делать не
Query.Open, а
Query.Active := False;
Query.Active := True;
так не рискуешь получить ексепшн, если Query уже открыта...


Johnmen   (2002-05-28 15:43:00) [9]

Убей Query и создай его заново...


Наверх

Титульная страница Поиск, карта сайта Написать письмо