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

Вниз

В триггере узнать какие поля обновились   Найти похожие ветки 

 
Sour   (2005-02-18 11:04) [0]

Есть триггер Before Insert для некоторой таблицы. В нем надо определить не изменилось ли поле field1.

Как это сделать правильно?

Я пробую так:
new.field1 <> old.field1.

Эта конструкция хорошо работает, но если старое или новое значение is null, тогда не хочет.

Firebird 1.5


 
Sergey13 ©   (2005-02-18 11:06) [1]

> но если старое или новое значение is null, тогда не хочет.

Хм. А проверить это условие в тригере религия не позволяет?


 
Sour   (2005-02-18 11:25) [2]

Какая еще религия?
Более подробно:
1.
 //new.filed1 = "привет";
 //old.filed1 = "пока";
 if (new.field1 <> old.field1) then
 begin
   // в этом случае попадаем в этот блок
 end

2.
 //new.filed1 = "привет";
 //old.filed1 = null;
 if (new.field1 <> old.field1) then
 begin
   // в этом случае сюда НЕ попадаем!!!!
   // хотя должны
 end

3.
 //new.filed1 = null;
 //old.filed1 = "пока";
 if (new.field1 <> old.field1) then
 begin
   // в этом случае тоже сюда НЕ попадаем!!!!
   // хотя должны
 end

Я подозреваю нельзя сравнивать null со значением какого-либо типа, т.к. проверка на null выполняется конструкцией is null.

Поэтому и спрашиваю как узнать, что поле изменило значение, независимо от того какое оно было и какое стало (включаю null-значения).


 
P.N.P. ©   (2005-02-18 11:30) [3]

Речь идет о проверке на null :
 if (new.field1 <> old.field1)or
((new.field1 is null and not old.field1 is null)or
(old.field1 is null and not new.field1 is null)) then
begin

end


 
Sergey13 ©   (2005-02-18 11:32) [4]

[2] Sour   (18.02.05 11:25)
>Я подозреваю нельзя сравнивать null со значением какого-либо типа, т.к. проверка на null выполняется конструкцией is null.

Зато можно проверить что то на NULL.
If (old.field is Null) and (new.field is not Null) then ....


 
ЮЮ ©   (2005-02-18 11:33) [5]

1)
if
 (new.field1 IS NULL) AND NOT (old.field1 IS NULL) OR
 NOT (new.field1 IS NULL) AND (old.field1 IS NULL) OR
 (new.field1 <> old.field1)
then
 изменилось

2)
if
 NOT (
   (new.field1 IS NULL) AND (old.field1 IS NULL) OR
   (new.field1 = old.field1)
 )
then
 изменилось


 
stud ©   (2005-02-18 13:21) [6]

а если например так?
if ((coalesce(old.naim,"-1"))<>(coalesce(new.naum,"-1"))) then



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

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

Наверх




Память: 0.48 MB
Время: 0.028 c
1-1109840119
Гость
2005-03-03 11:55
2005.03.20
Где можна скачать чудо-библиотеку компонентов RXLib?


3-1108636507
msguns
2005-02-17 13:35
2005.03.20
Изменение имени IB-процедуры в IBExpress


14-1109348077
Бугага
2005-02-25 19:14
2005.03.20
DevExpress for Delphi 6


1-1110190627
Andriy Tysh
2005-03-07 13:17
2005.03.20
TVS_CHECKBOXES &amp; TreeView. Как сделать с тремя состояниями ?


1-1110362767
rolex
2005-03-09 13:06
2005.03.20
Зачем нужны DLL???