![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка в триггере на not null [D7, IB6.x]
Zlod3y © (2005-01-08 00:49:00)есть таблица
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 всё-таки появлялся на экране?
Desdechado (2005-01-21 11:54:00) [1]3. или апдейти явно без указания поля kod_printer вместо использования внутреннего автоматического механизма апдейта, встроенного в компоненты
Zlod3y (2005-01-21 11:49:00) [2]я пользуюсь IBConsole для проверки нормальной работы триггеров.
посмотрел версию файла ibserver.exe
6.5.0.28
Desdechado (2005-01-21 11:41:00) [3]1. в какой-то из версий IB проверка констраинтов шла раньше (глюк), чем срабатывали триггеры, так что версия важна
2. ты попробуй использовать свои компоненты так, чтобы поле kod_printer при апдейте было заполнено, неважно чем, все равно триггер отыграет. Похоже, ты через ClientDataSet пользуешь базу,так вот он обращает внимение на метаданные
Zlod3y (2005-01-21 11:29:00) [4]ну я так и сделал сейчас, только сообщение всё-равно лезет
Desdechado (2005-01-21 10:58:00) [5]странная немного логика - апдейтить первичный суррогатный ключ...
если уж так хочется проверку втулить, сделай так
if( new.kod_printer IS NULL ) then
new.kod_printer=old.kod_printer;
Zlod3y (2005-01-21 00:47:00) [6]>> jack128 © (08.01.05 02:46) [6]
а ты инсерт и апдейт делал в IBExpert или в своём приложении?
у меня в IBExpert'е тоже всё хорошо и красиво показывает, а в моём приложении по-другому. :-(
jack128 (2005-01-08 02:46:00) [7]Ну и на апдейте тоже самое.. Все работает как надо..
GanibalLector (2005-01-08 01:49:00) [8]>а у меня вроде IB 6.0, точно не знаю и не знаю как узнать, ставил вместе с D7
А если на панель управления посмотреть?
Zlod3y (2005-01-08 01:31:00) [9]jack128 © (08.01.05 01:15) [2]
зы: не в клонах дело
а у меня вроде IB 6.0, точно не знаю и не знаю как узнать, ставил вместе с D7
Zlod3y (2005-01-08 01:26:00) [10]на BEFORE INSERT у меня тоже подобный триггер есть, и он работает отлично, но вот с BEFORE UPDATE это не проходит почему-то, хотя всё сделано почти также, как и у тебя в BEFORE INSERT
jack128 (2005-01-08 01:15:00) [11]Версия 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:00) [12]ps fb1.5