Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.114 c
6-1079800088
13-th Warrior
2004-03-20 19:28
2004.05.16
Как отправить файл по сети?


1-1083387988
SHS
2004-05-01 09:06
2004.05.16
Application.Exename в DLL


9-1072088847
AlexCo
2003-12-22 13:27
2004.05.16
Спрайты!!!


1-1083163623
fedor
2004-04-28 18:47
2004.05.16
Щелчок в item s ListView


6-1080200333
nester
2004-03-25 10:38
2004.05.16
Как программно добавить эккаунт в OutlookExpress