Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

каскадное удаление [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]

Смотря какая БД, в некоторых можно внешний ключь натроить таким образом, что при удалении записи в главной таблицы удаляется и в подчиненных.


Наверх

Титульная страница Поиск, карта сайта Написать письмо