powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ariерmetic exception
38 сообщений из 38, показаны все 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
Ariерmetic exception
    #32608867
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Структура

CREATE TABLE ZAKAZ (
ID INTEGER NOT NULL,
NOM SMALLINT,
DADA DATE,
USER_ID SMALLINT,
STREET1_ID SMALLINT,
DOM1 VARCHAR(8) CHARACTER SET WIN1251,
APP VARCHAR(20) CHARACTER SET WIN1251,
TEL VARCHAR(15) CHARACTER SET WIN1251,
STREET2_ID SMALLINT,
DOM2 VARCHAR(8) CHARACTER SET WIN1251,
TARIF FLOAT,
TIMEN TIME,
TIMER TIME,
CAR_ID SMALLINT,
EXECZAKAZ SMALLINT,
PROZVON SMALLINT,
STREET3_ID SMALLINT,
DOM3 VARCHAR(8) CHARACTER SET WIN1251,
STREET4_ID SMALLINT,
DOM4 VARCHAR(8) CHARACTER SET WIN1251,
STREET5_ID SMALLINT,
DOM5 VARCHAR(8) CHARACTER SET WIN1251,
PUNKT1 SMALLINT,
PUNKT2 SMALLINT,
PUNKT3 SMALLINT,
PUNKT4 SMALLINT,
PRIMECH VARCHAR(100) CHARACTER SET WIN1251,
PROSTOY1 SMALLINT,
PROSTOY2 SMALLINT,
PROSTOY3 SMALLINT,
PROSTOY4 SMALLINT,
MESS SMALLINT,
PROZVON2 SMALLINT,
BEZNAL SMALLINT,
RAST SMALLINT,
MARSHRUT VARCHAR(255) CHARACTER SET WIN1251,
MARSHRUT1 VARCHAR(255) CHARACTER SET WIN1251,
MARSHRUT2 VARCHAR(255) CHARACTER SET WIN1251,
ARH SMALLINT DEFAULT 0,
DTNEVIP TIMESTAMP,
DRIVERGIVEMIN SMALLINT,
BLOK SMALLINT,
DTZAKAZ TIMESTAMP default Current_TimeStamp,
NOTEDITCAR SMALLINT default 0 NOT NULL,
USERLASTEDIT_ID SMALLINT,
INET SMALLINT default 0 NOT NULL,
USERR_ID SMALLINT,
DTZAKAZR TIMESTAMP,
BILZVONOK SMALLINT default 0 NOT NULL,
CAR SMALLINT,
NEVIPZAKAZ2 SMALLINT default 0 NOT NULL,
EXECZAKAZ2 SMALLINT default 0 NOT NULL,
KAKDOLGOVVOD FLOAT,
ADDPAYMOB DOUBLE PRECISION default 0 NOT NULL,
INET_IP VARCHAR(50) CHARACTER SET WIN1251,
VERS INTEGER default 0 NOT NULL,
LINKCAR VARCHAR(255) CHARACTER SET WIN1251,
KOLONA SMALLINT default 1 NOT NULL
);


Проблемные записи:
ID NOM DADA USER_ID STREET1_ID DOM1 APP TEL STREET2_ID DOM2 TARIF TIMEN TIMER CAR_ID EXECZAKAZ PROZVON STREET3_ID DOM3 STREET4_ID DOM4 STREET5_ID DOM5 PUNKT1 PUNKT2 PUNKT3 PUNKT4 PRIMECH PROSTOY1 PROSTOY2 PROSTOY3 PROSTOY4 MESS PROZVON2 BEZNAL RAST MARSHRUT MARSHRUT1 MARSHRUT2 ARH DTNEVIP DRIVERGIVEMIN BLOK DTZAKAZ NOTEDITCAR USERLASTEDIT_ID INET USERR_ID DTZAKAZR BILZVONOK CAR NEVIPZAKAZ2 EXECZAKAZ2 KAKDOLGOVVOD ADDPAYMOB INET_IP VERS LINKCAR KOLONA
876950 2 16.07.2004 168 2351 20 в 395 462-87-92 3454 1 35 11:30:00 11:30:00 0 0 0 1 0 0 0 Свадьба. 0 0 0 0 -45 0 0 12 144-143-142-141-264-268-282-358-284-285-286-287; 0 0 1 22.06.2004 10:56:15 0 108 0 0 0 0 0 15 0 7227466 1
876949 1 16.07.2004 168 2351 20 в 395 462-87-92 3454 1 35 11:30:00 11:30:00 0 0 0 1 0 0 0 свадьба. 0 0 0 0 -45 0 0 12 144-143-142-141-264-268-282-358-284-285-286-287; 0 0 1 22.06.2004 10:55:44 0 108 0 0 0 0 0 81 0 7227473 1
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608894
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Ответ не правильный. При not nullя всегда делаю default  0  (ну или что-то по смыслу).
Ну вот, тебе в IBExplorer и будут показано на "старых" записях в "измененных" полях 0, хотя там нифига не 0, а Null.

Выполни-ка такой запрос:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * from ZAKAZ where 
ID is NULL or
NOTEDITCAR is NULL or
INET is NULL or
BILZVONOK is NULL or
NEVIPZAKAZ2 is NULL or
EXECZAKAZ2 is NULL or
ADDPAYMOB is NULL or
VERS is NULL or
KOLONA is NULL
Давай результаты.
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608911
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавь PLAN NATURAL
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608915
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще:
- когда ты свои любимые поля:

Код: plaintext
DOM1, APP, TEL, DOM3 ...

сделал CHARACTER SET WIN1251 ?
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608923
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По запросу записей нет (plan Natural).
А win1251 сделал сегодня в процессе нахождения проблемы. Но это ничего не дало
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608934
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 МП: А зачем "Добавь PLAN NATURAL"?

Объясни.
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608935
Фотография AndriyKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь РПо запросу записей нет (plan Natural).
А win1251 сделал сегодня в процессе нахождения проблемы. Но это ничего не дало

А долбануть ты эту запись могешь ? Или тоже ошибка ?
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608941
Фотография AndriyKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mv2 МП: А зачем "Добавь PLAN NATURAL"?

Я так понял, чтобы исключить возможность подключения битых индексов, так, что ли ?
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608947
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долбануть то я могу, что я и сделал на рабочей базе. Все работают и улыбаются. Но я хочу все таки узнать причину возникновения таких ошибок, как их избежать в будущем...
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608955
Фотография AndriyKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь РНо я хочу все таки узнать причину возникновения таких ошибок, как их избежать в будущем...

Кто его знает. Сейчас вот припомнилось, было что-то вроде этого и у меня. Если память не отказывает, тогда я просто пересоздал индексы.
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32608961
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А при чем тут индексы?
Есть теоретическое объяснение.
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32609011
Игорь Р
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Больше рекомендаций нет?
...
Рейтинг: 0 / 0
Ariерmetic exception
    #32609014
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендация тут одна.
НЕФИГ КОВЫРЯТЬ МЕТАДАННЫЕ НА РАБОЧЕЙ БАЗЕ.
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ariерmetic exception
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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