Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.029 c
1-1083432904
Leon
2004-05-01 21:35
2004.05.16
PAGE_FAULT в NT


3-1082487136
sergg
2004-04-20 22:52
2004.05.16
Как обойти все объекты в DataModule


1-1083493916
Sour
2004-05-02 14:31
2004.05.16
как проверить соответсвие xml схеме xsd


7-1080714657
Amirka
2004-03-31 10:30
2004.05.16
Проверка наличия ActiveX -библиотеки в системе


11-1069691640
Phantom
2003-11-24 19:34
2004.05.16
Динамически создать пункты Popup-меню




   Наверх