Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Триггеры

27K
14 мая 2007 года
Kanareika
4 / / 13.05.2007
Привет всем!!!
Проблема вот в чем: объясню на примере. Есть две таблицы: Читатель и Закрепленные за ним книги. В БД создала специальный триггер, который позволяет удалять читателя, у которого на руках есть книги, и выводит [COLOR=darkred]соответствующее сообщение, что такого читателя удалять нельзя[/COLOR].[COLOR=black] Разрабатываю приложение в Дельфи. Как сделать так, чтобы при удалении "неверного" читателя в Дельфи (т.е. у которого есть на руках книги) выводилось [COLOR=darkred]то сообщение из триггера[/COLOR] (чтобы триггер сработал в Дельфи)???? Ведь же есть специальный компонент для хранимых процедур, а для триггера???[/COLOR]
P.S.: я просмотрела разные форумы, но в итоге только запуталась:confused: . Разъясните, пожалуйста!!!
16K
23 мая 2007 года
right_systems
29 / / 08.11.2006
Какая БД используется?
Если InterBase/Firebird, то там есть Events, а в Delphi есть компонент, который такие Events умеет обратабывать. Смотри в этом направлении.
27K
23 мая 2007 года
Kanareika
4 / / 13.05.2007
БД я создавала на MS SQL Server'e. Соответственно триггеры там же, а затем подключала к Delphi. В таком случае что делать???? А то я вообще не знаю!!! :confused: И если вы знаете как сделать, чтобы триггеры работали в Delphi, то можно [COLOR=red]поподробней[/COLOR], т.к. я с Delphi работаю пару месяцев и плохо еще в нем разбираюсь.
Заранее спасибо!!! :)
16K
24 мая 2007 года
right_systems
29 / / 08.11.2006
С MS SQL я не работал, а беглый обзор оглавления имеющихся у меня книг ни на какую мысль не навел. В любом случае я бы пошел несколько другим путем. Вижу их даже два.
1. Удалять записи через хранимую процедуру (кстати наиболее рекомендуемый в литературе путь), которая в выходных параметрах сообщает удалось ли удалить запись.
2. После выполнения Delete-запроса смотреть сколько записей он затронул (не знаю как именно это в MS SQL делается, но как-то должно) и если 0 - выкидывать сообщение.

Цитата:

В БД создала специальный триггер, который позволяет удалять читателя, у которого на руках есть книги, и выводит соответствующее сообщение, что такого читателя удалять нельзя.


Если не секрет, куда триггер выводит свое сообщение? И как это выглядит если клиент и сервер находятся на разных машинах? Было интересно на код этого триггера взглянуть.

303
24 мая 2007 года
makbeth
1.0K / / 25.11.2004
Kanareika, right_systems абсолютно прав. В твоем случае заморачиваться с тригеррами, ИМХО, не стоит. Проще перед удалением делать простую проверку на существование записей в подчиненной таблице:
 
Код:
SELECT count(*) FROM ReaderBooks WHERE ReaderBooks.UserId = <...>

Если результат запроса равен 0, то пользователя можно удалить. Оформи его как отдельную хранимую процедуру и вызывай ее перед удалением пользователя.
713
24 мая 2007 года
Ap0k
360 / / 13.03.2006
Почитайте про RAISERROR.
Затем выстреливайте своим исключением из триггера, которое приложение может благополучно получить, обработать и определить что именно произошло по идентификатору переданному в [COLOR="Blue"]RAISERROR[/COLOR] и выдать соответствующее сообщение.
274
24 мая 2007 года
Lone Wolf
1.3K / / 26.11.2006
а зачем тригер вобще? МС вобще недаст удалить рользователя если в таблице книг есть ФК на него... иначе была бы нарушена целосность СУБД
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог