Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
3-11834
Марат
2003-12-08 07:24
2004.01.05
DBComboBox


3-11807
Vera
2003-12-08 07:22
2004.01.05
FIBQuery и Dbgrid


3-11772
peypivo
2003-12-09 18:12
2004.01.05
TDbgrid


3-11794
Goida
2003-11-20 22:24
2004.01.05
Проблема с вызовом хранимых процедур


14-12091
}|{yk
2003-12-15 13:17
2004.01.05
Об установке компонент - траблы с dsgnintf