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

Вниз

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

 
Zlod3y ©   (2005-01-08 00:49) [0]

есть таблица

create table printer
(
 kod_printer smallint not null primary key,
 naimenovanie varchar(15) not null unique
);


есть триггер на обновление данных

create trigger bu_printer for printer
active before update position 0
as
begin
 if (new.kod_printer is null) /*!!!это сравнение работает неадекватно, сначала вылазиет системное сообщение об ошибке, а cancel_upd_id вообще не вылазиет*/
   then exception cancel_upd_id;
   else if (upper(old.naimenovanie)<>upper(new.naimenovanie))
          then if (exists(select naimenovanie from memory where (upper(naimenovanie)=upper(new.naimenovanie))))
                 then exception dbl_msg;
end


почему не срабатывает такое сравнение должным образом и как мне добиться того чтобы cancel_upd_id всё-таки появлялся на экране?


 
jack128 ©   (2005-01-08 01:15) [1]

Версия IB?? У меня все работает

/******************************************************************************/
/***          Generated by IBExpert 2004.09.09 08.01.2005 1:19:14           ***/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES WIN1251;

CREATE DATABASE "LOCALHOST:D:\Program Files\HK-Software\IB Expert 2.0\DB\TestDB.gdb"
USER "SYSDBA" PASSWORD "masterkey"
PAGE_SIZE 4096
DEFAULT CHARACTER SET WIN1251;

/******************************************************************************/
/***                                Domains                                 ***/
/******************************************************************************/

CREATE DOMAIN NEW_DOMAIN AS
INTEGER;

/******************************************************************************/
/***                               Exceptions                               ***/
/******************************************************************************/

CREATE EXCEPTION SAME_EXCEPTION "Exception";

/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/

CREATE TABLE NEW_TABLE (
   PK  INTEGER NOT NULL,
   I   INTEGER
);

/******************************************************************************/
/***                              Primary Keys                              ***/
/******************************************************************************/

ALTER TABLE NEW_TABLE ADD CONSTRAINT PK_NEW_TABLE PRIMARY KEY (PK);

/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/

SET TERM ^ ;

/* Trigger: NEW_TABLE_BI0 */
CREATE TRIGGER NEW_TABLE_BI0 FOR NEW_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
 if (new.pk is null) then
   exception same_exception;
end
^

SET TERM ; ^


 
jack128 ©   (2005-01-08 01:15) [2]

ps fb1.5


 
Zlod3y ©   (2005-01-08 01:26) [3]

на BEFORE INSERT у меня тоже подобный триггер есть, и он работает отлично, но вот с BEFORE UPDATE это не проходит почему-то, хотя всё сделано почти также, как и у тебя в BEFORE INSERT


 
Zlod3y ©   (2005-01-08 01:31) [4]

jack128 ©   (08.01.05 01:15) [2]
зы: не в клонах дело
а у меня вроде IB 6.0, точно не знаю и не знаю как узнать, ставил вместе с D7


 
GanibalLector ©   (2005-01-08 01:49) [5]

>а у меня вроде IB 6.0, точно не знаю и не знаю как узнать, ставил вместе с D7

А если на панель управления посмотреть?


 
jack128 ©   (2005-01-08 02:46) [6]

Ну и на апдейте тоже самое..  Все работает как надо..


 
Zlod3y ©   (2005-01-21 00:47) [7]

>> jack128 ©   (08.01.05 02:46) [6]
а ты инсерт и апдейт делал в IBExpert или в своём приложении?
у меня в IBExpert"е тоже всё хорошо и красиво показывает, а в моём приложении по-другому. :-(


 
Desdechado ©   (2005-01-21 10:58) [8]

странная немного логика - апдейтить первичный суррогатный ключ...
если уж так хочется проверку втулить, сделай так
if( new.kod_printer IS NULL ) then
 new.kod_printer=old.kod_printer;


 
Zlod3y ©   (2005-01-21 11:29) [9]

ну я так и сделал сейчас, только сообщение всё-равно лезет


 
Desdechado ©   (2005-01-21 11:41) [10]

1. в какой-то из версий IB проверка констраинтов шла раньше (глюк), чем срабатывали триггеры, так что версия важна
2. ты попробуй использовать свои компоненты так, чтобы поле kod_printer при апдейте было заполнено, неважно чем, все равно триггер отыграет. Похоже, ты через ClientDataSet пользуешь базу,так вот он обращает внимение на метаданные


 
Zlod3y ©   (2005-01-21 11:49) [11]

я пользуюсь IBConsole для проверки нормальной работы триггеров.
посмотрел версию файла ibserver.exe
6.5.0.28


 
Desdechado ©   (2005-01-21 11:54) [12]

3. или апдейти явно без указания поля kod_printer вместо использования внутреннего автоматического механизма апдейта, встроенного в компоненты



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

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

Наверх




Память: 0.5 MB
Время: 0.03 c
14-1106968626
Думкин
2005-01-29 06:17
2005.02.20
С Днем рождения! 29 января


14-1106769065
Oddin
2005-01-26 22:51
2005.02.20
Потдержка скинов


1-1107815090
GanibalLector
2005-02-08 01:24
2005.02.20
Денежные столбец в TStrinGrid


9-1100688436
Bryke
2004-11-17 13:47
2005.02.20
Высоко сижу...


8-1099053979
dedMazDie
2004-10-29 16:46
2005.02.20
Параметры видеокамеры