Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2012, 10:48   #1
teapot
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 23
Лампочка DBE Проверка на наличие связанных данных при удалении записи

Добрый день!

Создала с помощью DBE (Paradox 7) несколько таблиц, среди них есть связанные.

Сначала вопрос: как можно программно из главной таблицы перейти в подчинённую? Иначе говоря: допустим, у меня есть 20 таблиц, и всего одна из них подчинена главной. Использую компоненты DataSourse, TTable, DBGrid. Есть ли какое-то свойство у этих компонентов, чтобы обратиться напрямую к подчинённой таблице и с ней поработать? Гуглила, но безрезультатно.

А нужно это вот для чего.

Для связанных таблиц в настройках можно выбрать один из двух вариантов:
1) Prohibit - запрещено изменять значение ключевого поля головной таблицы или удалять из неё записи:
2) Cascade - при изменении значения ключевого поля головной таблицы изменится значение этого поля в подчинённой, а при удалении записи из головной таблицы будут удалены все записи в подчинённой таблице, в которой используется это значение.

Собственно говоря, хотелось бы получить что-то среднее - запретить удаление при наличии записей в подчинённой таблице (если же в подчинённой таблице записей с таким значением нет, то удалять можно). А при изменении ключевого поля в головной таблице менять его в подчинённой.

В идеале, хотелось бы оставить опцию Cascade, но при попытке удалить запись проверять программно, используется ли её ключ в подчинённой таблице.

Буду очень благодарна за ответы!
teapot вне форума Ответить с цитированием
Старый 08.01.2012, 11:35   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

позволю себе маленькое уточнение:
думаю, что у Вас речь идёт о BDE (Borland DataBase Engine)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.01.2012, 11:45   #3
teapot
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
думаю, что у Вас речь идёт о BDE (Borland DataBase Engine)
Эм, ну да.
teapot вне форума Ответить с цитированием
Старый 09.01.2012, 00:25   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

имхо, Вам нужно сделать следующее.
1) поставить в свойствах связи "CASCADE" (это чтобы удаление можно было выполнить.
2) программно обеспечить так, чтобы ключи в головной таблице НЕ МЕНЯЛИСЬ.
При попытке удалить запись из головной таблицы программно на клиенте проверять, если ли записи в подчинённой таблице.
Если есть - выдавать ошибку и не удалять запись в головной таблице. Если же записей в подчинённой нет - выполнять удаление.
проверять можно через запрос:
Код:
select count(*) from ПодчинённаяТаблица 
where ПолеСвязиID = ID_в_головной_таблице;


p.s. кстати, прежде чем всё это мутить, а проверьте: имхо при задании свойства связи "Prohibit" из головной таблицы можно будет удалять записи, но только в том случае, если нет ссылок в подчинённой таблице. Т.е. именно то, что Вам и нужно!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.02.2012, 19:13   #5
teapot
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
проверять можно через запрос:
Код:
select count(*) from ПодчинённаяТаблица 
where ПолеСвязиID = ID_в_головной_таблице;
Собственно, я так и написала в результате - проверку при удалении. Правда, как использовать select в Парадоксе, так и не разобралась. Вручную таблицы просматривала.
teapot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
master has detail records cannot delete or modify при удалении записи hunter03 БД в Delphi 5 30.03.2011 22:23
Как при вводе данных на одной форме - добавить запись на двух связанных таблицах? маврик Microsoft Office Access 13 05.11.2009 10:40
проверка вводимых значений не производится при удалении Air_kplp Microsoft Office Excel 7 29.05.2009 09:01
Проблема со значением поля-счетчика при удалении записи RammFan БД в Delphi 11 02.04.2009 22:54
Как вывести сообщение типа "внимание" при удалении записи из БД Alex_Sokolov Помощь студентам 7 06.01.2009 13:50