|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.11.2010, 10:34 | #1 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
Access ограничить значение поля таблицы значениями полей другой таблицы
Здравствуйте. У меня в бд есть две таблицы:
1) Дома. Поля: id, дата постройки, дата сноса; 2) Жильцы. Поля: id, id_дом, дата заселения. Как в бд поставить такое ограничение, чтобы в поле дата заселения по выбранному дому можно было вводить только дату между датой постройки и датой сноса? |
10.11.2010, 10:50 | #2 |
Delphi, учу С
Форумчанин
Регистрация: 20.10.2010
Сообщений: 178
|
В конструкторе таблички Жильцы внизу есть куча всяких доп. параметров, среди них - маска ввода.
|
10.11.2010, 13:06 | #3 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
Нет, это не то. Мне не нужен ввод в определенном формате, мне нужно введенное значение проверить на условие:
(Жильцы.[дата заселения]>=Дома.[дата постройки]) and (Жильцы.[дата заселения]<Дома.[дата сноса]) и чтобы, если условие=false, access как-нибудь ругался бы, выдавал ошибку. Или такая проверка возможна лишь в приложении? |
10.11.2010, 13:46 | #4 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
Попробовал для поля дата заселения ввести условие на значение >[Таблицы]![Дома]![дата_постройки], но при сохранении Access ругается, что не может найти поле Таблицы]![Дома]![дата_постройки.
|
10.11.2010, 15:00 | #5 |
Участник клуба
Регистрация: 10.08.2009
Сообщений: 1,796
|
Здравствуйте Сергей089.
Ответ на вопрос "..есть две таблицы .. Как .. поставить .. ограничение..?" в Вашем случае - никак. "условие на значение" задается константой, динамически изменять его нельзя. Да и потребности в этом нет, т.к. таблицы БД предназначены для хранения данных, ввод и обработка должны осуществляться с применением "Интерфейса" (форм), в них и задаются все алгоритмы и условия выполнения работы с данными. И Ваше желание "..две таблицы..поставить такое ограничение.." может реализоваться именно так - с формой. Успехов Вам. Евгений. |
10.11.2010, 15:41 | #6 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
Спасибо Teslenko_EA, но с формой не интересно. А если человек полезет заполнять прямо в таблицу значения, то потом будут разные нестыковки. Нашел похожую тему Creating a Table with a Validation Rule Referencing a Column in Another Table и переписал под себя запрос:
Код:
Прикрепил то, что получилось. |
10.11.2010, 22:20 | #7 |
Участник клуба
Регистрация: 10.08.2009
Сообщений: 1,796
|
Сергей089, Вы конечно правы предикат CONSTRAINT который можно применять для установления связи с другой таблицей,
и ограничения на одно или несколько полей, в MS Access существует. Но то-ли потому что MS Jet не поддерживает использование инструкции CONSTRAINT вне Jet ядра, то-ли потому что предложение CONSTRAINT используется только в инструкциях ALTER TABLE и CREATE TABLE, т.е. не поддерживается мастером запросов MS Access, он почти не применяется. (зря ведь на него можно возложить часть функций отсутствующего триггера) При создании (CREATE) или изменении (ALTER) таблиц в SQL конструкцию можно добавлять (или удалять) предложение CONSTRAINTэто хорошо, есть надежда на возможность возвращения таблицы в разряд удаляемых. "..нигде найти не могу.." - вот оно проявление отсутствия мастера, (для многих пользователей MS Access это не преодолимая преграда) "..с формой не интересно .. А если человек полезет заполнять прямо в таблицу..", для начала : люди обычно не лазят а ходят, ну а если так случилось и кто-то "полез", барьером для него должен быть интерфейс (форма). В некоторых случаях форма - "барьер", в некоторых "помощник". По аналогии с банком, БД - тоже банк (данных), даже если Вы являетесь вкладчиком банка, для обеспечения целостности данных Вас никогда не допустят в хранилище, максимум к менеджеру/оператору. Банк беспокоится о целостности своих ресурсов, а Вы заботитесь о целостности данных Евгений. |
11.11.2010, 01:53 | #8 |
Пользователь
Регистрация: 01.09.2010
Сообщений: 28
|
Здравствуйте Сергей089.
Абсолютно согласен с Евгением и готов подписаться под его словами. Считаю "... лазить заполнять прямо в таблицу..." чрезвычайно неразумно! В этом случае практически невозможен мониторинг и контроль действий пользователя и целостности данных! И Ваш вопрос тому пример. Столько "телодвижений" для задачи, которая гораздо проще решается стандартными методами. Разве только чисто из "спортивного" интереса... Последний раз редактировалось D.Shibanov; 11.11.2010 в 01:56. |
07.12.2010, 00:05 | #9 |
Новичок
Джуниор
Регистрация: 06.12.2010
Сообщений: 2
|
Граждане умные! Помогите мне пожалуйста. Я учусь на первом курсе на редактора, мне надо сделать контрольную работу по информатике, в частности база данных. И одно из заданий
"В поле «Цена поставки» таблицы «Поставки» должно стоять условие, учитывающее, что цена поставляемой продукции не может быть ниже ее себестоимости в таблице «Продукция». " (таблицы связаны по товару один-ко многим) Ответьте мне, пожалуйста: это мне надо сделать практически то, что здесь описал Сергей089? Или я не так поняла и от меня всё-таки требуется что-то намного проще? просто в методичке все пояснения ограничены "При этом, для задания значения поля по умолчанию либо Условия на ввод значений в поле таблицы при ее заполнении, можно использовать Построитель выражений, который активизируется кнопкой в этой строке с тремя точками либо одноименной кнопкой на панели пиктографического меню. " Спасибо за внимание. Извините за беспокойство. Последний раз редактировалось vasja_slvm; 07.12.2010 в 00:09. |
07.12.2010, 14:02 | #10 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
Это был SQL запрос. Как использовать использовать Построитель выражений я не знаю. Я сделал через запрос.
Таблицы такие: Поставки ключ id_поставки Счетчик Цена поставки Числовой код_продукции Числовой Продукция ключ id_продукции Счетчик Себестоимость Числовой Для этого нужно зайти в Сервис->Параметры на вкладку "Таблицы и запросы" и поставить галочку в "Синтаксис для SQL Server". Затем создать запрос в режиме конструктора, никаких таблиц добалять не нужно. На запросе вызвать контекстное меню и выбрать "режим SQL". Вставить код: Код:
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запрос: обновление поля таблицы, данные из другой | Blondy | Microsoft Office Access | 2 | 04.04.2010 15:38 |
присвоить переменной значение поля в последней записи таблицы | KaimNotark | БД в Delphi | 1 | 03.02.2010 07:21 |
Как залпом исправить значение полей таблицы | bullvinkle | SQL, базы данных | 10 | 18.11.2009 14:29 |
Данные из двух полей исх. таблицы в одно поле сводной таблицы | Strelec79 | Microsoft Office Excel | 2 | 02.08.2009 13:59 |
Найти и подставить значение из другой таблицы | ElenaTro | Microsoft Office Excel | 1 | 01.04.2009 13:01 |