Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 08.01.2012, 10:48   #1
teapot
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 23
Репутация: 10
Лампочка 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
Сообщений: 25,679
Репутация: 5617
По умолчанию

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

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

имхо, Вам нужно сделать следующее.
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
Репутация: 10
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
master has detail records cannot delete or modify при удалении записи hunter03 БД в Delphi 5 30.03.2011 22:23
Как при вводе данных на одной форме - добавить запись на двух связанных таблицах? маврик Microsoft Office Access 13 05.11.2009 11: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 14:50


23:28.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru