![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что за ошибка такая? [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 и создай его заново...