Текущий архив: 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.48 MB
Время: 0.04 c