Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 Сообщение об ошибке в триггере  [new]
pirab41
Member

Откуда:
Сообщений: 8
Добрый день.

У меня есть две таблички JournalFly и FlyArea (журнал полетов и посадочная площадка)
CREATE TABLE JOURNALFLY (
    JOURNALID      INTEGER PRIMARY KEY ,
    DATEARRIVAL    TIMESTAMP,
    DATEDEPARTURE  TIMESTAMP,
    FLYAREAID      INTEGER 
);
 
CREATE TABLE FlyArea (
       FlyAreaID            INTEGER PRIMARY KEY,
       SizeArea             VARCHAR(10)
);


Я создала триггер, который проверяет: если дата прилета вертолёта попала в промежуток стоянки другого воздушного судна, то вертолет который прилетел не может сесть на эту посадочную площадку, где уже стоит воздушное судно (нужно будет указать номер другой площадки)

CREATE EXCEPTION ErrorFlyArea 'Данная посадочная площадка уже занята';

CREATE OR ALTER TRIGGER FreeFlyArea FOR JournalFly
ACTIVE AFTER INSERT OR UPDATE
AS
DECLARE LFlyAreaID PKFIELD;
BEGIN 
FOR SELECT FlyAreaID FROM JournalFly WHERE NEW.DateArrival>=DateArrival AND NEW.DateArrival<=DateDeparture
INTO :LFlyAreaID
DO
BEGIN
 IF (NEW.FlyAreaID = LFlyAreaID)
  THEN EXCEPTION ErrorFlyArea;
  END
END


Вроде всё работает, но
Если я укажу посадочную площадку, на которой уже стоит воздушное судно, высветится сообщение об ошибке. И после этого, я уже не могу указать никакую площадку (пустую или же которая занята). Постоянно будет всплывать сообщение об ошибке

Помогите, пожалуйста...
8 апр 21, 00:54    [22305749]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение об ошибке в триггере  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52887

pirab41
если дата прилета вертолёта попала в промежуток стоянки другого воздушного судна, то
вертолет который прилетел не может сесть на эту посадочную площадку, где уже стоит
воздушное судно

Может. Взлететь потом уже будет облом, но пассажиров даже не придётся соскребать ложками с
бетона.

Posted via ActualForum NNTP Server 1.5

8 апр 21, 01:09    [22305751]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение об ошибке в триггере  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 972
Вот поэтому я стараюсь не летать.
8 апр 21, 01:22    [22305753]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение об ошибке в триггере  [new]
zeon11
Member

Откуда: Сибирь, Кемерово
Сообщений: 1271
pirab41,

для начала поставьте триггер не на AFTER INSERT OR UPDATE, а на BEFORE ....
8 апр 21, 09:36    [22305805]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение об ошибке в триггере  [new]
a7exander
Member

Откуда:
Сообщений: 32
pirab41,

насчет того что постоянно будет всплывать сообщение об ошибке виновата ваша программа а не БД, ищите что вы там делаете после того как словите исключение, а вот зачем перебирать в триггере все посадочные площадки тогда как вам нужно всего одна совершенно непонятно, лучше NEW.FlyAreaID = LFlyAreaID добавьте в SELECT и выбирайте COUNT(*) и потом если >0 то EXCEPTION
8 апр 21, 09:53    [22305818]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение об ошибке в триггере  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 1056
pirab41,

Вы хотите, чтобы из триггера открылось диалоговое окно для изменения номера площадки?
8 апр 21, 13:04    [22305922]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение об ошибке в триггере  [new]
hvlad
Member

Откуда:
Сообщений: 11257
Это в принципе не работоспособно в многопользовательском окружении.
8 апр 21, 13:15    [22305931]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить