Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

Проверка на кратность в триггере   Найти похожие ветки 

 
Нонэйм   (2005-02-08 22:32) [0]

это кусок таблицы, оставил проблемное место


create generator g_base;
set generator g_base to -2147483648;

create exception e_ne_kraten_2 "OBbEM O3Y HE KPATEH 2-M";

create table base
(
 id integer not null primary key,
 memory numeric(5,0) not null,
 n numeric(5,0), /*эти поля использую*/
 f float         /*для наглядности*/
);

set term ^ ;
create trigger base_bi0 for base
active before insert position 0
as
 declare variable n numeric(5,0);
 declare variable f float;
begin
 n=new.memory/2.0;
 f=new.memory/2.0;
 if (f<>n) then exception e_ne_kraten_2;
 new.n=n;
 new.f=f;
 if (new.id is null)
   then new.id=gen_id(g_base, 1);
end^

set term ; ^


не понимаю почему не срабатывает exception e_ne_kraten_2
Может быть мастера подскажут в чём тут дело или подскажут другой метод проверки кратности? заранее благодарю


 
Johnmen ©   (2005-02-08 22:44) [1]

>n=new.memory/2.0;
>f=new.memory/2.0;
>if (f<>n) then ...

Вот и не срабатывает. Они равны  :)

Насчет кратности.
Она имеет смысл только для целочисленных значений.
Проверить:
2*(CAST(INVALUE/2.0 AS INT))-INTVALUE
0 - кратно, 1 - не кратно


 
Нонэйм   (2005-02-08 22:57) [2]

cast"ом воспользуюсь, спасибо
а вот то, что они равны, то я не соглашусь, я ж потом записываю их в таблицу и смотрю результаты....возьмем к примеру new.memory=11, то n=6, а f=5.5


 
Johnmen ©   (2005-02-08 23:14) [3]

А... Понятно. n - целое, f - с плавающей точкой.
Отсюда и несовпадение...


 
Johnmen ©   (2005-02-08 23:45) [4]

И ещё...
При сравнении происходит неявное преобразование типов.
В данном случае - значение f преобразуется к целому.
Попробуй (f<>n/1.0)


 
Нонэйм   (2005-02-08 23:49) [5]

уже поздно :о))))
2*(CAST(INVALUE/2.0 AS INT))-INTVALUE вот это хорошо работает, спасибо :о)


 
Johnmen ©   (2005-02-08 23:58) [6]

Да не за что...
Только учти, что для отрицательных некратность = -1
Т.е. если = 0, то кратно, иначе - нет.



Страницы: 1 вся ветка

Текущий архив: 2005.03.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
4-1106643434
vogel
2005-01-25 11:57
2005.03.06
Как сделать чтоб прога не отображалась в панели задач


1-1108996059
XP
2005-02-21 17:27
2005.03.06
Возможно ли "зависание" в этом коде из VCL? (критические секции)


14-1108606999
Steepe Wolf
2005-02-17 05:23
2005.03.06
Update Delphi6


11-1092249616
=Sniper=
2004-08-11 22:40
2005.03.06
Как выделить цветом какое-либо свово в RichEdit е?


1-1108554718
AbramovVi
2005-02-16 14:51
2005.03.06
Классы из DLL