Главная страница
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.036 c
1-1110188134
Checist [root]
2005-03-07 12:35
2005.03.20
TEdit


1-1109837833
Gerakl
2005-03-03 11:17
2005.03.20
STAThread (Delphi 2005)


1-1110384707
1010111000110101110
2005-03-09 19:11
2005.03.20
Delphi 8 for .NET и обычный Windows - нельзя?


1-1109948600
вопрос
2005-03-04 18:03
2005.03.20
Надо из компонента узнать, что в форме выполнилось событие


14-1109683449
Sulimxar
2005-03-01 16:24
2005.03.20
GNU LGPL и исходники