Главная страница
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.03 c
8-1101481881
Ilg
2004-11-26 18:11
2005.03.20
Преобразование TPicture в TBitmap


14-1109396531
begin...end
2005-02-26 08:42
2005.03.20
С Днём рождения! 26 февраля


1-1109923161
Oleg_
2005-03-04 10:59
2005.03.20
как правильно снять выделение с combobox?


3-1108921984
Raul Kartes
2005-02-20 20:53
2005.03.20
БД.Delphi


3-1108698060
Ярослав
2005-02-18 06:41
2005.03.20
FireBird Embeded &amp; Win98