![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Есть ли в Paradox каскадное удаление? [Paradox]
__alex © (2006-05-08 19:24:00)Берем 2 таблицы (Paradox 7), связываем их по некому полю отношением один-ко-многим. Update rule выбираем Cascade. И потом пытаемся удалить запись из главной (master) таблицы.
Если при этом в подчиненной таблице существует одна или несколько записей, соответствующих выбранной в главной таблице записи, то получаем такую ошибку:
Master has detail records. Cannot delete or modify.
Я что то делаю не так или в paradox и правда нет возможности каскадного удаления?
__alex (2006-05-08 23:17:00) [1]Угу, ты прав, mike-d... Блин, неудобно все это...
mike-d (2006-05-08 22:53:00) [2]
> на ум ничего хорошего не приходит кроме перелопачивания
> всех записей
Ничего и не придет наверное больше :)
Повесь удаление detail'ов на BeforeDelete master-таблицы - примерно так:
procedure Data.Table1BeforeDelete(...);
begin
Table2.First;
while not Table2.Eof do Table2.Delete;
end;
procedure Data.Table2BeforeDelete(...);
begin
Table3.First;
while not Table3.Eof do Table3.Delete;
end;
__alex (2006-05-08 20:19:00) [3]Тогда такой вопрос. В описаном выше случае где одна мастер-таблица и одна подчиненная, каскадное удаление можно организовать простеньким sql-запросом вроде
DELETE FROM detailTable WHERE Id=...
ну и потом удаление записи в мастер-таблице.
Но че делать если у нас например 3 или более таблиц:
table1 (master-detail) table 2 (master-detail) table3
и надо удалить запись из "самой главной" таблицы table1? Че то на ум ничего хорошего не приходит кроме перелопачивания всех записей в рекурсии. А никак это попроще нельзя сделать? Ну не обязательно sql-запросом, может другое какое решение есть?
mike-d (2006-05-08 19:34:00) [4]
> Есть ли в Paradox каскадное удаление?
Нет. Есть только каскадный UPDATE.