Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Firebird, InterBase |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52887 |
Может. Взлететь потом уже будет облом, но пассажиров даже не придётся соскребать ложками с бетона. Posted via ActualForum NNTP Server 1.5 |
||
8 апр 21, 01:09 [22305751] Ответить | Цитировать Сообщить модератору |
Старый плюшевый мишка Member Откуда: Сообщений: 972 |
Вот поэтому я стараюсь не летать. |
8 апр 21, 01:22 [22305753] Ответить | Цитировать Сообщить модератору |
zeon11 Member Откуда: Сибирь, Кемерово Сообщений: 1271 |
pirab41, для начала поставьте триггер не на AFTER INSERT OR UPDATE, а на BEFORE .... |
8 апр 21, 09:36 [22305805] Ответить | Цитировать Сообщить модератору |
a7exander Member Откуда: Сообщений: 32 |
pirab41, насчет того что постоянно будет всплывать сообщение об ошибке виновата ваша программа а не БД, ищите что вы там делаете после того как словите исключение, а вот зачем перебирать в триггере все посадочные площадки тогда как вам нужно всего одна совершенно непонятно, лучше NEW.FlyAreaID = LFlyAreaID добавьте в SELECT и выбирайте COUNT(*) и потом если >0 то EXCEPTION |
8 апр 21, 09:53 [22305818] Ответить | Цитировать Сообщить модератору |
KreatorXXI Member Откуда: Москва Сообщений: 1056 |
pirab41, Вы хотите, чтобы из триггера открылось диалоговое окно для изменения номера площадки? |
8 апр 21, 13:04 [22305922] Ответить | Цитировать Сообщить модератору |
hvlad Member Откуда: Сообщений: 11257 |
Это в принципе не работоспособно в многопользовательском окружении. |
8 апр 21, 13:15 [22305931] Ответить | Цитировать Сообщить модератору |
Все форумы / Firebird, InterBase | ![]() |