Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Триггер ограничивающий удаление строк. [IB6.x]


tomat ©   (2002-12-18 12:07:00) 

Зравствуйте!

Существует ли возможность с помощью триггера (или др. средств) запретить удалять строку (запись) в зависимости от значения столбца (поля).

Спасибо!


Alexandr   (2002-12-18 13:42:00) [1]

давайте не будет тут про обновляемый view.


Reindeer Moss Eater   (2002-12-18 13:39:00) [2]

>Johnmen ©
Я вот что имел ввиду. Если триггер знает о всех строках, которые удалять нельзя, то я бы например не давал гранты на удаление из самой таблицы никому. Создал бы View, включающий все строки, которые можно удалять. И запросы на удаление делал бы к просмотру


Johnmen   (2002-12-18 13:26:00) [3]

>Reindeer Moss Eater (18.12.02 13:16)

Ничего подобного !


>tomat

Возбуждать ексепшн есть стандартное, абсолютно правильное решение.


Reindeer Moss Eater   (2002-12-18 13:16:00) [4]

Ну триггер, обламывающий DELETE - это не меньшее извращение


Romkin   (2002-12-18 13:06:00) [5]

Извращение...


Reindeer Moss Eater   (2002-12-18 13:04:00) [6]

И что без исключения ника нельзя?!
Можно.
Например делать Insert удаляемой записи в триггере на BEFORE DELETE :)


Romkin   (2002-12-18 13:02:00) [7]

Никак, да и exit имеет полностью тот же смысл, что и в Delphi, и запись удалится. На клиенте обычно сообщение и требуется, почему нельзя удалить, поэтому и exception


tomat   (2002-12-18 12:49:00) [8]

И что без исключения ника нельзя?!


Sergey Masloff   (2002-12-18 12:44:00) [9]

EXIT
Jumps to the final END statement in the procedure. Available in stored procedures only.
~~~~~~~~~~~~~~~~~


tomat   (2002-12-18 12:40:00) [10]

CREATE TRIGGER TEST_TRIGGER FOR TEST
ACTIVE
BEFORE DELETE
AS
BEGIN
IF ( OLD.CODE = 0 ) THEN EXIT;
END^

Ошибочка, в чём косяк не пойму!
EXIT по английски!

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown.
EXIT.


FreeLancer   (2002-12-18 12:14:00) [11]

BEFORE DELETE

...
AS
BEGIN
IF (Pole = "Bad Value") THEN EXCEPTION MyException;
END

или

...
AS
BEGIN
IF (Pole = "Bad Value") THEN EXIT; /* По-тихому */
END


Romkin   (2002-12-18 12:09:00) [12]

Можно, достаточно дать exception в нужный момент, и вся транзакция откатится. Ессно, before delete


Наверх

Титульная страница Поиск, карта сайта Написать письмо