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