Главная страница
    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.45 MB
Время: 0.037 c
9-1072015827
MrAngel
2003-12-21 17:10
2004.05.16
Найти координаты точки внутри полигона.


1-1082741799
GRF
2004-04-23 21:36
2004.05.16
Диалог выбора директории с кнопкой "Создать"


3-1082163141
juiceman
2004-04-17 04:52
2004.05.16
Microsoft SQL Server &amp; Oracle


6-1080036190
alexprozorov
2004-03-23 13:03
2004.05.16
Проблема нотификационных сообщений


1-1083061788
siriusP
2004-04-27 14:29
2004.05.16
Прошу помощи продвинутых. Создание компоненты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский