powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ariерmetic exception
25 сообщений из 38, страница 1 из 2
Ariерmetic exception
    #32608490
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, что может быть.
Есть база Yaffill
В таблице поле SmallInt. При попытке присвоить ему значение (например 2), причем даже при помощи IBConsole выдается ошибка 'Ariерmetic exception numeric overflow, or string trancation'. Это возникает редко. Ошибок в базе нет, backUp-Restore выполняется, не помогает. Из-за чего эта ошибка?
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608502
Фотография AndriyKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь РПодскажите, что может быть.
Есть база Yaffill
В таблице поле SmallInt. При попытке присвоить ему значение (например 2), причем даже при помощи IBConsole выдается ошибка 'Ariерmetic exception numeric overflow, or string trancation'. Это возникает редко. Ошибок в базе нет, backUp-Restore выполняется, не помогает. Из-за чего эта ошибка?

Покажи запрос изменения поля и, если есть, текст триггеров на обновление этой таблицы.
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608535
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел в инете ссылки на подобные вопросы. Говорят это из-за Character set. У меня действительно установлено в none. Как можно на лету у базы установить character set? Может что-то еще нужно установить?
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608546
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Character set к данной постановке вопроса отношения никакого не имеет...
:)
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608555
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Далее все триггеры по UPDATE
А сама строка 'UPDATE ZAKAZ SET EXECZAKAZ=2 where ID=876950'


CREATE TRIGGER "NOM_ZAKAZ_U" FOR "ZAKAZ"
ACTIVE BEFORE UPDATE POSITION 1
AS declare variable i int; BEGIN
NEW.VERS=GEN_ID(VERSIYA,1);
IF (OLD.DADA<>NEW.DADA) THEN BEGIN select max(NOM) from ZAKAZ a where a.Dada = new.Dada into i; new.NOM = i+1; if ((new.NOM is NULL) or (new.NOM = 0)) then new.NOM = 1; END END
^

CREATE TRIGGER "T_ZAKAZ_LAST_U" FOR "ZAKAZ"
ACTIVE BEFORE UPDATE POSITION 1
AS
declare variable dt TimeStamp;
declare variable dtl TimeStamp;
BEGIN
if (new.ExecZakaz<>old.ExecZakaz) then
if (new.ExecZakaz=2) Then
begin
dt=new.Dada+new.Timer;
select dtlast from car where id=new.car_id and fired=0 into dtl;
if (:dtl is null) then
UPDATE car set dtLast=:dt where id=New.Car_id and fired=0;
else if (dt>dtl) then
UPDATE car set dtLast=:dt where id=New.Car_id and fired=0;
end
if (new.Car_id>0) then
if (new.Car_Id<>old.Car_id) then
begin
dt=CURRENT_TIMESTAMP;
select dtlast from car where id=new.car_id and fired=0 into dtl;
if (:dtl is null) then
UPDATE car set dtLast=:dt where id=New.Car_id and fired=0;
else if (dt>dtl) then
UPDATE car set dtLast=:dt where id=New.Car_id and fired=0;
end
END
^

CREATE TRIGGER "T_ZAKAZ_BEZNAL" FOR "ZAKAZ"
ACTIVE BEFORE UPDATE POSITION 2
AS
declare variable idDB SmallInt;
declare variable idF SmallInt;
declare variable proc SmallInt;
BEGIN
if (new.ExecZakaz<>old.ExecZakaz) then begin
if (new.beznal>0) then begin
select id from dengi_beznal where nomzak=new.nom and datZak=new.dada into idDB;
select id,proc1 from fbeznal where nom=new.beznal into idF,proc;
if (:idDB>0) then
if (new.ExecZakaz=2) then
UPDATE dengi_beznal SET dengi=0-new.Tarif-new.Tarif*:proc/100, firma_id=:idF WHERE id=:idDB;
else
UPDATE dengi_beznal SET dengi=0, firma_id=:idF WHERE id=:idDB;
else
if (new.ExecZakaz=2) then
INSERT INTO dengi_beznal (dt,user_id,firma_id,dengi,priznak,nomzak,datzak) values (Current_TimeStamp,new.user_id,:idF,(0-new.Tarif-new.Tarif*:proc/100),1,new.nom,new.dada);
else if (old.ExecZakaz=2) then
INSERT INTO dengi_beznal (dt,user_id,firma_id,dengi,priznak,nomzak,datzak) values (Current_TimeStamp,new.user_id,:idF,(new.Tarif+new.Tarif*:proc/100),1,new.nom,new.dada);
end
end else if (new.ExecZakaz=2) then begin
select id from dengi_beznal where nomzak=new.nom and datZak=new.dada into idDB;
select id,proc1 from fbeznal where nom=new.beznal into idF,proc;
if (new.beznal>0) then begin
if (:idDB>0) then
UPDATE dengi_beznal SET dengi=0-new.Tarif-new.Tarif*:proc/100, firma_id=:idF WHERE id=:idDB;
else
INSERT INTO dengi_beznal (dt,user_id,firma_id,dengi,priznak,nomzak,datzak) values (Current_TimeStamp,new.user_id,:idF,(0-new.Tarif-new.Tarif*:proc/100),1,new.nom,new.dada);
end else if (old.beznal>0) then begin
if (:idDB>0) then
UPDATE dengi_beznal SET dengi=0, firma_id=:idF WHERE id=:idDB;
end
end
END
^

CREATE TRIGGER "T_ZAKAZ_NEC_U" FOR "ZAKAZ"
ACTIVE BEFORE UPDATE POSITION 2
AS
declare variable dt TimeStamp;
declare variable cec SmallInt;
declare variable razni SmallInt;
BEGIN
dt=CURRENT_TIMESTAMP;
select CanEditCar from nastr where id=1 into cec;
razni=(CURRENT_TIMESTAMP-new.dtZakaz)*1440;
if (new.Car_id<>old.Car_id) then
begin
if (new.NotEditCar=1) then
if (cec>0) then
if (razni>cec) then
insert into penalty (car_id,car2_id,user_id,datep,timep,primech,nedavat,dateZak,NomZak) values (old.car_id,new.car_id,new.userLastEdit_id,Current_date,current_time,'Èçìåíåíà ìàøèíà',3,new.dada,new.nom);
if (new.NotEditCar=0) then begin
new.NotEditCar=1;
end
new.userr_id=new.UserLastEdit_id;
new.dtzakazR=current_timestamp;
INSERT INTO PHONERING (USER_ID,ZAKAZ_ID,WHAT,ZAKAZ_NOM) VALUES (new.UserLastEdit_id,new.id,2,new.nom);
end
if (old.TimeN<>new.TimeN) then begin
new.dtzakaz=Current_timestamp;
INSERT INTO PHONERING (USER_ID,ZAKAZ_ID,WHAT,ZAKAZ_NOM) VALUES (new.UserLastEdit_id,new.id,1,new.nom);
end
if (old.Blok<>new.Blok) then begin
if (new.Blok=5) then begin
INSERT INTO PHONERING (USER_ID,ZAKAZ_ID,WHAT,WHAT_DOP,ZAKAZ_NOM) VALUES (-1,new.id,2,2,new.nom);
end
end
END
^

CREATE TRIGGER "PROZVON_ZAKAZ_U" FOR "ZAKAZ"
ACTIVE BEFORE UPDATE POSITION 3
AS
declare variable i int;
BEGIN IF (OLD.PROZVON<>NEW.PROZVON) THEN
BEGIN
if (OLD.PROZVON=0) then begin
NEW.EXECZAKAZ2=OLD.EXECZAKAZ;
NEW.EXECZAKAZ=0;
end else if (NEW.PROZVON=0) then begin
if (OLD.EXECZAKAZ2>0) then NEW.EXECZAKAZ=OLD.EXECZAKAZ2;
end
END
END
^

CREATE TRIGGER "AU_ZAKAZ" FOR "ZAKAZ"
ACTIVE AFTER UPDATE POSITION 0
AS BEGIN POST_EVENT 'zakaz'; END
^
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608649
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что, никто ничего не подскажет?
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608661
Фотография AndriyKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь РДалее все триггеры по UPDATE
А сама строка 'UPDATE ZAKAZ SET EXECZAKAZ=2 where ID=876950'

Попробуй на копии БД поотключать по очереди все эти триггеры (переводи их в состояние INACTIVE) Как найдешь, в каком именно происходит сбой, сообчи.
Кстати, первые 2 триггера имеют одинаковый Position. Зачем ?
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608690
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отключил все триггеры, проблема осталась
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608694
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А констреинты к этой таблице есть?
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608726
Фотография AndriyKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь РОтключил все триггеры, проблема осталась

А на поле ZAKAZ не наложено ли ограничение типа Value In (...) или что-то в этом роде ?
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608762
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ограничений на таблицу нет.
Есть куча индексов
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608765
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угу. А фореигн кеу с каскаде, например, он упдате опшнс, есть?
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608774
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный нюанс:
Глючат таким образом заказы, введенные 20 дней назад. 22.06 было Insert, а сейчас пытаюсь с ними сделать UPDATE. Те заказы, которые вводились вчера, сегодня нормально поддаются Update. Что можно было сделать с базой такого с 22.06 по 16.07, чтобы введенные строки не поддавались update?

И еще вопрос. Действительно ли character set не причем? У меня стоит none, а работаю я в принципе с кирилицей. Работаю нормально.
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608784
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверь базу gfix'ом. Очень даже могут быть битые страницы.
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608787
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще. В этих строчках я не могу изменить ни одно поле (прямой доступ через IBExpert)
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608798
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем более. Проверяй.
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608821
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ошибок нет.
Маразм какой то
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608829
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За последнее время метаданные не менял?
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608832
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfix.exe -v -full t.gdb -user SYSDBA -password masterkey
ведь я правильно проверяю...
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608834
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меняю частенько
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608835
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В основном добавляю колонки.
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608847
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое, честно говоря наблюдалось и ранее.
К примеру: я у клиента делаю backup базы и забираю домой на cd-r. Приношу,делаю дома restore и опа, записи не update. Новые дома создаю - нормально.
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608848
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно. Ты добавил колонку с, например, Not Null, который не выполняется для "старых" записей, когда этой колонки не было. Тебе повезло, что b/r не делал.

Понятно?
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608854
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи структуру таблицы и значения полей "проблемной" записи. Сейчас по-быстрому все исправим.
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608855
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответ не правильный. При not nullя всегда делаю default 0 (ну или что-то по смыслу).
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ariерmetic exception
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]