![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
каскадное удаление [D6, D7]
karburator © (2003-11-26 08:25:00)
Мастера, подскажите пож. как лучше всего осуществить каскадное удаление в базах. Надоело вписывать вручную процедуру очистки дочерних баз при удалении записи из какого-либо справочника.
Пробовал решить это путем создания компонента (от TTable) для родительской базы, в свойствах которого указывается массив справочников-потомков и полей связи. По записям массива при удалении из справочника записи происходит удаление несуществующих записей в привязанных базах. Но мне почаму-то кажется, что я перемудрил :)
Sandman25 (2003-12-08 13:41:00) [1]
Я запускал в приложении транзакцию и удалял все, что нужно было, при этом проверяя RowsAffected и ругаясь в случае нарушения - если в другой таблице (не справочнике) записи должны были быть, но почему-то не оказывались).
Если нужно изменять в третьей таблице, то перед удалением нужно посчитать изменение (select sum()...), запомнить, отметить записи как удаленные (изменить поле is_deleted), еще раз запустить расчет изменения, но уже с учетом поля is_deleted=true и сравнить результат. Если все в порядке, можно удалять записи у которых нужный Id и is_deleted = true. Иначе ругаемся, что вмешался другой пользователь.
Виталий Панасенко (2003-12-08 12:58:00) [2]
SQL то удалит... Но ! А если ты при этом должен что-то менять в другой (третьей) таблице при удалении ? При уделении из TTable есть обработчик BeforeDelete, а там как ?
karburator (2003-12-08 10:31:00) [3]
Думал, уже никто ничего не напишет, чисто случайно заглянул.
С помощью SQL осущ. каскадное del - интересный способ, попробую.
Спасибо за ответы
Anatoly Podgoretsky (2003-12-07 14:20:00) [4]
Зачем же циклом? Используй SQL
Jacot (2003-12-07 14:16:00) [5]
Если я правильно понял, то в базе существует отношение "один ко многим". Необходимо удалить записи из подчинённой таблицы при удалении из ведомой.
Я удалял записи из таб2 с помщью цикла, затем запись в таб1.
Извиняюсь за ламерский подход.
Я думал что создав целостность БД по первичному ключу, при удалении из таб1 записи, в таб2 удалятся все записи связанные по этому ключу. Но у меня выпала ошибка, пришлось удалять способом описанным выше.
Вот такие тараканы...
Maxud (2003-11-26 10:49:00) [6]
В Парадоксе можно настроить контроль за СЦ, но удалять из 2-й таблицы все равно придется ручками.
karburator (2003-11-26 10:37:00) [7]
Ну в .mdb как настроить ссылочную целостность я разобрался, а в paradox-e как я понял низя, да?
Anatoly Podgoretsky (2003-11-26 10:00:00) [8]
Первое база, в ней ручками, а второе не база и понятие не применимо.
Anatoly Podgoretsky (2003-11-26 10:00:00) [9]
karburator (26.11.03 09:59) [4]
Для этой базы не применимо
karburator (2003-11-26 09:59:00) [10]
Anatoly Podgoretsky
хмм... А как настроить ссылочную целостность?
karburator (2003-11-26 09:57:00) [11]
->АлексейК (26.11.03 08:55) [1]
->Смотря какая БД, в некоторых можно внешний ключь натроить
->таким образом, что при удалении записи в главной таблицы
->удаляется и в подчиненных.
Paradox, ADO
Anatoly Podgoretsky (2003-11-26 09:22:00) [12]
Настроить ссылочную целостность
АлексейК (2003-11-26 08:55:00) [13]
Смотря какая БД, в некоторых можно внешний ключь натроить таким образом, что при удалении записи в главной таблицы удаляется и в подчиненных.