Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 2
Регистрация: 14.11.2012
Сообщений: 46
1

Как сделать так, чтобы строки одной таблицы не могли удалиться до тех пор, пока существуют соответствующие строки другой таблицы?

06.09.2013, 13:49. Просмотров 745. Ответов 5
Метки нет (Все метки)


Имеются две таблицы: Заявки и соответствующие заявкам Испытания.

Вначале пользователь заполняет строку Заявки, потом переходит на следующую форму и вносит испытания.

На форме, где демонстрируется таблица "Заявки" имеется кнопка "Удалить заявку". Код:
Delphi
1
2
3
4
5
6
fdm.QTemp.Close;      //закрываем временный запрос
fdm.QTemp.SQL.Clear;  //очищаем временный запрос
 
fdm.QTemp.SQL.Add('delete from zayav where id ='+ QuotedStr(fdm.QueryZayavID.AsString));
fdm.QTemp.ExecSQL;
 fdm.fdm.QueryZayav.Refresh;
Как сделать так, чтобы, если для данной заявки уже введены ранее испытания, выскакивало сообщение типа "Вы не можете удалить эту заявку, пока не удалены соответствующие ей испытания"? В противном случае, если в таблице испытаний для соответствующей заявки пусто - заявка удалялась?

Я думаю написать как-то так:
Delphi
1
2
3
4
5
6
7
fdm.QueryIspitan.Open; //запрос, который на форме испытаний открывает испытания - select * from ispitan
 
if fdm.QueryZayavID.AsInteger=fdm.QueryIspitanID_ZAYAV.AsInteger 
 and fdm.QueryIspitanID_ZAYAV.AsInteger<>0 //т.е. если ID_ZAYAV уже существует
then ShowMessage ("Вы не можете удалить эту заявку, пока не удалены соответствующие ей испытания")
else
fdm.QTemp.ExecSQL;
Как лучше оформить код? Или, может, в базе ID_ZAYAV указать в качестве foreigh key для таблицы Zayav? Если да, то как это сделать?
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2013, 13:49
Ответы с готовыми решениями:

Как сделать, так, чтобы ряд действий в программе выполнялся до тех пор, пока пользователь не нажмёт на крестик
Как сделать, так, чтобы ряд действий в программе выполнялся до тех пор, пока пользователь не нажмёт...

Можно сделать так, чтобы в Word 2010 строки таблицы были на одной странице
Привет. Приведу сразу скриншот: Не очень удобно читать, когда начинается строка таблица на одной...

Как сделать так,чтобы у меня запрашивало элементы массива до тех пор пока не будет введено верное значение типа double...
using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

Сделать так, чтобы поиск продолжался до тех пор, пока в тексте не перестанет находиться слово
Как сделать так чтобы поиск продолжался до тех пор, пока в тексте не перестанет находится слово?)...

__________________
Помогаю в написании студенческих работ здесь.
5
18 / 18 / 13
Регистрация: 10.11.2010
Сообщений: 143
07.09.2013, 00:38 2
Ангелина_, а что за СУБД? на ее уровне можно запретить удаление записей, на которых есть ссылки в других таблицах
0
2 / 2 / 4
Регистрация: 30.05.2011
Сообщений: 22
09.09.2013, 09:06 3
Скорее всего лучше создать форегн ключ для ваших таблиц, со связью . Так будет проще, и удобнее для Вас. Как сделать ключ неизвестно, пока не станет известно СУБД которую вы используете
0
0 / 0 / 2
Регистрация: 14.11.2012
Сообщений: 46
09.09.2013, 09:54  [ТС] 4
elluminate, СУБД- Oracle.

Добавлено через 2 минуты
Цитата Сообщение от jonikorz Посмотреть сообщение
Скорее всего лучше создать форегн ключ для ваших таблиц, со связью . Так будет проще, и удобнее для Вас. Как сделать ключ неизвестно, пока не станет известно СУБД которую вы используете
Я боюсь, что я наделаю каких-нибудь ключей, из-за которых потом вообще ничего удалить не смогу. Я с Ораклом пока только начинаю знакомство. Хотелось бы все-таки в Делфи этот вопрос решить, если это возможно, конечно.
0
2 / 2 / 4
Регистрация: 30.05.2011
Сообщений: 22
09.09.2013, 09:57 5
С Ключами у Вас не должно быть сложностей, они предназначены для связи таблиц, и обеспечения целостности данных, поэтому сделайте Ключи и не волнуйтесь. МОжете сделать копию программы и потренироваться
0
Модератор
3872 / 2846 / 544
Регистрация: 21.01.2011
Сообщений: 12,349
09.09.2013, 10:12 6
Цитата Сообщение от Ангелина_ Посмотреть сообщение
Я боюсь, что я наделаю каких-нибудь ключей, из-за которых потом вообще ничего удалить не смогу. Я с Ораклом пока только начинаю знакомство.
Foreign Key (FK) предназначены именно для подобных вещей. Зачем на клиенте городить то, что решается средствами СУБД?
Тем более, если с этими таблицами будут работать несколько программ, то подобный контроль нужно будет сотворять в каждой, а в БД это делается один раз.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2013, 10:12

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Нужно сделать так, чтобы данные из одной таблицы (например, несколько имен) добавлялись в столбец другой
Пытался найти, как сделать так, чтобы в столбец whoworkout таблицы respisanie добавлялись данные из...

Как сделать так что бы цикл продолжался до тех пор пока будет выведено 5 корректных результатов?
как сделать так что бы цикл продолжался до тех пор пока будет выведено 5 корректных результатов, а...

Перенос двух ячеек из одной строки таблицы, в одну ячейку другой таблицы.
Можно ли каким-то образом перенести так как показано на рисунках. Нужно при нажатии на клавишу,...

Перенос двух ячеек из одной строки таблицы, в одну ячейку другой таблицы.
Я объясню по кароче. Если чек бокс = true то две ячеки надо занести и объединить в одну в другой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.