Текущий архив: 2004.05.16;
Скачать: CL | DM;
ВнизЦелостность на уровне ссылок в Paradox Найти похожие ветки
← →
V l a d i m i r (2004-04-21 13:39) [0]Необходимо обеспечить каскадное обновление данных, когда с удалением записи в главной таблице удаляются все связанные с ней записи из подчиненных таблиц. Для простоты приведу такой пример: в Database Desktop создаю две таблицы:
1) Головная Department с ключевым полем Dep (строковое поле)
2) Подчиненная таблица ProfitLoss с полями Code(автоприращаемое), Dep (строковое, считывается из головной), Date (пусть будет строковая, в которую заносится дата),ну и можно Profit и Loss соответственно, в которые заносятся прибыль и убыток.
В Database Desktop создаю вторичный индекс для Department (indDep по полю Dep), а в подчиненной ProfitLoss - indDepDate. А теперь самое интересное: для того чтобы создать целостность на уровне ссылок, открываю для редактирования ProfitLoss и далее Table Properties->Referential Integrity->Define. Связываю по полю Dep подчиненную и головную таблицы, сохраняю связь под именем refDep.
Теперь в Delphi для подчиненной таблицы (Table2,DataSourse2)устанавливаю MasterSourse->DataSourse1 головной таблицы, а MasterField->Dep (для этого таблицы были сначала проиндексированы по этому полю). Все, заполняю таблицы и запускаю приложение..
----------------------------------------------
При попытке удалить в головной таблице запись выскакивает сообщение: Master has detail records. Cannot delete or modify.. В подчиненной записи удалить самому можно. После этого без проблем удаляется запиьс и в головной таблице.
А как сделать так, чтобы соблюдалась ЦЕЛОСТНОСТЬ?
Спасибо всем, у кого хватило терпения дочитать все это до конца... Но зато подробно..
← →
V l a d i m i r (2004-04-21 14:14) [1]P.S. Работа с бд происходит в D6, база данных - Paradox, ОС - ХР
Может, я и не прав, но полагаю забить на referential integrity и написать свой алгоритм каскадного обновления? В принципе, ничего сложного не должно быть: читаю поле Dep, а потом фильтрую по этому полю подчиненную табицу и далееwhile ProfitLoss.RecordCount<>0 do ProfitLoss.Delete
, как?
← →
LM2 (2004-04-21 14:26) [2]Используй для TTable событие OnBeforeDelete, в нем удаляй данные из подчиненной таблицы
Страницы: 1 вся ветка
Текущий архив: 2004.05.16;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.031 c