
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
05.07.2002, 09:25
|
|||
|---|---|---|---|
|
|||
Как остановить неявно стартуемую транзакцию при выполнении триггера ? |
|||
|
#18+
Проблема такая, есть две таблицы одна справочник товаров, другая список накладных. При попытке удалить товар из справочника срабатывает триггер "Перед удалением" , проверяет наличие этого товара в списке накладных и, если он есть, должен производить откат транзакции. AS declare variable C integer; begin /* Определяем наличие товара в накладных */ select count(Key_Tov) from sod_nakl where (Key_tov=old.key_tov)or (Key_tov=old.key_kat) into :c; /* Если товар присутствует */ if (:c>0) then begin rollback transaction; --- КАК ДОЛЖНО БЫТЬ ?????????? post_event"Del_Tov"; end; Каким образом отменить удаление. Если можно пример плззззззз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.07.2002, 19:34
|
|||
|---|---|---|---|
|
|||
Как остановить неявно стартуемую транзакцию при выполнении триггера ? |
|||
|
#18+
Привет! В твоем примере все просто - возбуди EXCEPTION, которое откатит все действия в твоем триггере. EXCEPTION myex; передварительно сойздав его CREATE EXCEPTION myex "Something terrible!" Однако сам подход не совсем корректен, на мой взгляд. Ведь другой человек в параллельно выполняющейся транзакции может использовать товар из справочника, который твой Select count(*) не увидит (данные то еще не подтверждены). В результате - битая ссылка на несуществующий товар. Надежнее, на мой взгляд, связать справочник товаров с накладной по внешнему ключу FOREIGN KEY (FK), который при попытке удаления используемого товара сразу будет ругаться. отловить ругань в try ...// удаляем except /// ShowMessage(извини не могу) end и все путем. Твой вариант с Select count() не является алтернативой FK, так как внешний ключ видит даже неподтвержденные изменения и не даст создать битой ссылки. С уважением, Алексей Ковязин, www.interbase-world.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.04.2004, 20:39
|
|||
|---|---|---|---|
|
|||
Как остановить неявно стартуемую транзакцию при выполнении триггера ? |
|||
|
#18+
А если я не хочу, чтобы выдавалось сообщение exception? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.04.2004, 20:54
|
|||
|---|---|---|---|
|
|||
Как остановить неявно стартуемую транзакцию при выполнении триггера ? |
|||
|
#18+
Ну и лови его в try ... except А вообще, кого-то плющит. Ветка эта за 2002-й год... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.04.2004, 22:44
|
|||
|---|---|---|---|
|
|||
Как остановить неявно стартуемую транзакцию при выполнении триггера ? |
|||
|
#18+
А если удаляют из DBGrid нажатием Ctrl-D или из DBNavigatorа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.04.2004, 10:19
|
|||
|---|---|---|---|
Как остановить неявно стартуемую транзакцию при выполнении триггера ? |
|||
|
#18+
2Мимопроходящий А вообще, кого-то плющит. Ветка эта за 2002-й год... Может он с того времени и решает этот вопрос. 8-) 2umpim А может просто форинкей поставить без каскадного удаления? И никаких тригеров не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/search_topic.php?author=Kaa_1985&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 633ms |
| total: | 896ms |

| 0 / 0 |
