Главная страница
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.045 c
1-1083323047
KEBZ
2004-04-30 15:04
2004.05.16
DLL


1-1083482796
Tishaishy
2004-05-02 11:26
2004.05.16
Синхронизация потоков , нужна помощь


14-1083046059
Rule
2004-04-27 10:07
2004.05.16
Электронщики, помогите коллеге программисту :)


14-1083052292
Slon_SCG
2004-04-27 11:51
2004.05.16
Автоматическое восстановление БД InterBase после сбоя


1-1082788613
Hkr
2004-04-24 10:36
2004.05.16
TThred...