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

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

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2014, 18:18   #1
vezunchik95
 
Регистрация: 23.05.2014
Сообщений: 6
По умолчанию Ограничения изменяемых значений

В общем, было дано задание на язык FoxPro, нужно было вывести несколько полей из БД и установить для них ограничения на изменение и ввод. Одним из пунктов был такой:

должна быть реализована проверка вводимых значений при редактировании поля Cost: вводить только цифры и их значение должно быть от 10 до 30. При неправильном вводе выводить сообщение.

На FoxPro это было успешно реализовано, но преподаватель сказал написать это на SQL. Поля с помощью команды SELECT я вывел, а вот как сделать это задание не знаю, учитывая что в SQL что-то вводить руками в таблицу нельзя изначально. Преподаватель дал подсказку, что с помощью процедуры UPDATE это сделать можно и еще как-то, но я ничего поэтому поводу не нашел, UPDATE изменяет значения в записях полей, но про ограничения и сообщения в синтаксисе ничего не нашел, помогите пожалуйста!
vezunchik95 вне форума Ответить с цитированием
Старый 12.11.2014, 19:30   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

UPDATE ничего не контролирует. Насколько помню и фоксовский UPDATE. Контролировать в СУБД могут триггера, CHECK-и на примере MS SQL, да и сами типы полей обычно регламентируют правильность вводимой информацию. Все очень по разному в разных СУБД. При недопустимых данных ошибка естественно вывалится при попытке выполнения UPDATE
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 12.11.2014 в 19:33.
Аватар вне форума Ответить с цитированием
Старый 12.11.2014, 19:49   #3
vezunchik95
 
Регистрация: 23.05.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
UPDATE ничего не контролирует. Насколько помню и фоксовский UPDATE. Контролировать в СУБД могут триггера, CHECK-и на примере MS SQL, да и сами типы полей обычно регламентируют правильность вводимой информацию. Все очень по разному в разных СУБД. При недопустимых данных ошибка естественно вывалится при попытке выполнения UPDATE
Благодарю, триггеры вроде то, что нужно, суметь бы еще правильно применить...

Последний раз редактировалось vezunchik95; 12.11.2014 в 20:02.
vezunchik95 вне форума Ответить с цитированием
Старый 13.11.2014, 11:15   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

vezunchik95, начните не с триггеров (хотя они тоже подходят).
Начните с CHECK:
что-то вроде
Код:
alter table ИмяТаблицы 
  add constraint ИмяКонстрейна check ( (cost >= 10) and (cost <= 30) )
А чтобы нельзя было ввести ничего, кроме цифр, поле COST должно иметь числовой тип.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.11.2014, 12:42   #5
vezunchik95
 
Регистрация: 23.05.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
vezunchik95, начните не с триггеров (хотя они тоже подходят).
Начните с CHECK:
что-то вроде
Код:
alter table ИмяТаблицы 
  add constraint ИмяКонстрейна check ( (cost >= 10) and (cost <= 30) )
А чтобы нельзя было ввести ничего, кроме цифр, поле COST должно иметь числовой тип.
И вам спасибо) А имя констрейна т.е. мной задается? И сообщение с нужным мне текстом об ошибке никак не вывести?

Последний раз редактировалось vezunchik95; 13.11.2014 в 12:53.
vezunchik95 вне форума Ответить с цитированием
Старый 13.11.2014, 13:42   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
А имя констрейна т.е. мной задается
Угу
Цитата:
И сообщение с нужным мне текстом об ошибке никак не вывести?
СУБД возвращает своё сообщение. Можно попытаться в CHECK обращаться к пользовательской функции, где сформировать сообщение. Так нужно еще уметь правильно обработать эти два сообщения. Если вообще возможно, идей таких не приходило
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ограничения в яп the_deer_one Свободное общение 43 28.05.2013 18:33
sql ограничения Русtam SQL, базы данных 2 28.07.2012 22:14
Random ограничения (pascal) _fynjy_ Помощь студентам 24 11.01.2011 10:19
Ограничения Flatterer Фриланс 1 08.03.2010 20:16
Как обойти ограничения? HAMMAN Свободное общение 3 19.12.2009 14:57