Триггеры
Проблема вот в чем: объясню на примере. Есть две таблицы: Читатель и Закрепленные за ним книги. В БД создала специальный триггер, который позволяет удалять читателя, у которого на руках есть книги, и выводит [COLOR=darkred]соответствующее сообщение, что такого читателя удалять нельзя[/COLOR].[COLOR=black] Разрабатываю приложение в Дельфи. Как сделать так, чтобы при удалении "неверного" читателя в Дельфи (т.е. у которого есть на руках книги) выводилось [COLOR=darkred]то сообщение из триггера[/COLOR] (чтобы триггер сработал в Дельфи)???? Ведь же есть специальный компонент для хранимых процедур, а для триггера???[/COLOR]
P.S.: я просмотрела разные форумы, но в итоге только запуталась:confused: . Разъясните, пожалуйста!!!
Если InterBase/Firebird, то там есть Events, а в Delphi есть компонент, который такие Events умеет обратабывать. Смотри в этом направлении.
Заранее спасибо!!! :)
1. Удалять записи через хранимую процедуру (кстати наиболее рекомендуемый в литературе путь), которая в выходных параметрах сообщает удалось ли удалить запись.
2. После выполнения Delete-запроса смотреть сколько записей он затронул (не знаю как именно это в MS SQL делается, но как-то должно) и если 0 - выкидывать сообщение.
Цитата:
В БД создала специальный триггер, который позволяет удалять читателя, у которого на руках есть книги, и выводит соответствующее сообщение, что такого читателя удалять нельзя.
Если не секрет, куда триггер выводит свое сообщение? И как это выглядит если клиент и сервер находятся на разных машинах? Было интересно на код этого триггера взглянуть.
Код:
SELECT count(*) FROM ReaderBooks WHERE ReaderBooks.UserId = <...>
Если результат запроса равен 0, то пользователя можно удалить. Оформи его как отдельную хранимую процедуру и вызывай ее перед удалением пользователя.
RAISERROR.
Затем выстреливайте своим исключением из триггера, которое приложение может благополучно получить, обработать и определить что именно произошло по идентификатору переданному в [COLOR="Blue"]RAISERROR[/COLOR] и выдать соответствующее сообщение.
Почитайте про
Затем выстреливайте своим исключением из триггера, которое приложение может благополучно получить, обработать и определить что именно произошло по идентификатору переданному в [COLOR="Blue"]RAISERROR[/COLOR] и выдать соответствующее сообщение.
а зачем тригер вобще? МС вобще недаст удалить рользователя если в таблице книг есть ФК на него... иначе была бы нарушена целосность СУБД