12.10.2005, 11:21 | #1 |
Участник
|
изменение значения поля в OnDelete
Мне нужно в onDelete определить возможно ли удаление записи, и если нет, то поставить значение поля Blocking в TRUE.
как это сделать? PHP код:
|
|
12.10.2005, 16:37 | #2 |
Участник
|
Я думаю надо сделать так:
IF (Нельзя Уалить) THEN BEGIN Blocking := TRUE; MODIFY; COMMIT; Error('Удаление Невозможно') END; |
|
12.10.2005, 16:37 | #3 |
Участник
|
Потому что ERROR откатывает все изменения.
Если уж очень надо то закрывай транзакцию перед ERROR. Blocking:=TRUE; или MODIFYALL(Blocking, TRUE); .... COMMIT; ERROR("...."); Но это глупый код. Мой тебе совет узнать для чего это нужно и сделать по-другому.
__________________
Удачи! |
|
12.10.2005, 16:38 | #4 |
Участник
|
Sharky, первый нах?
__________________
Удачи! |
|
12.10.2005, 16:41 | #5 |
Участник
|
Палюбому ...
|
|
13.10.2005, 09:52 | #6 |
Участник
|
Цитата:
Изначально опубликовано Polar
Потому что ERROR откатывает все изменения. Если уж очень надо то закрывай транзакцию перед ERROR. Blocking:=TRUE; или MODIFYALL(Blocking, TRUE); .... COMMIT; ERROR("...."); Но это глупый код. Мой тебе совет узнать для чего это нужно и сделать по-другому. Мне нужно прверять есть ли ссылка на запись из Таблицы1 в Таблице2, если да, то удаление нневоозможно. |
|
14.10.2005, 16:36 | #7 |
Участник
|
дело в том что если до этой проверки ты что-то менял в базе данных то изменения останутся.
Если у тебя будет какая-нибудь не простая процедура, то половина изменений сохранится а другая откатится. Вот будет весело потом. А если ты еще и не один программишь, то какой-нибудь коллега у себя сделает в коде таблица.Delete(true) и вспоминать тебя будет очень долго. Не приучай себя к такому коду. мой тебе искренний совет.
__________________
Удачи! |
|
17.10.2005, 14:27 | #8 |
Участник
|
Цитата:
Сообщение от Polar
дело в том что если до этой проверки ты что-то менял в базе данных то изменения останутся.
Если у тебя будет какая-нибудь не простая процедура, то половина изменений сохранится а другая откатится. Вот будет весело потом. А если ты еще и не один программишь, то какой-нибудь коллега у себя сделает в коде таблица.Delete(true) и вспоминать тебя будет очень долго. Не приучай себя к такому коду. мой тебе искренний совет. |
|
17.10.2005, 17:07 | #9 |
Участник
|
Цитата:
Сообщение от usach
Несовсем понял, но.... а как посоветуешь сделать тогда?
короче, COMMIT - опасная вещь. Все равно что гасить тараканов вакуумными бомбами высокой плотности.
__________________
Удачи! Последний раз редактировалось Polar; 17.10.2005 в 17:25. |
|