Ошибка при определении значения ограничения check access

0 / 0 / 0

Регистрация: 27.06.2022

Сообщений: 7

1

Маленькая ошибка бд Поставка товаров

27.06.2022, 18:07. Показов 793. Ответов 12


Студворк — интернет-сервис помощи студентам

Добрый день уважаемые пользователи данного сайте. Мне нужна ваша помощь с одной маленькой ошибкой.
Так как я не знаю, можно ли размешать скрины из acess, то не стану рисковать и оставлю ссылки на скрины.
Вот сама причина ошибки

Кликните здесь для просмотра всего текста

https://************/6a6f03aa94b9223fa3c19d89f1b9e4f9

Вроде бы всё правильно и даже результат появляется

Кликните здесь для просмотра всего текста

https://************/2766dbbb76086500c969e3d8fa67d877

Но при попытки добавить новые товары, появляется данная ошибка

Кликните здесь для просмотра всего текста

https://************/3e6440a750e4c4a54bd6d6016a30f192

Пытался несколькими простыми движения решить эту проблему, но как видите не смог.
Буду признателен за вашу помощь.



0



Эксперт MS Access

17320 / 7146 / 1614

Регистрация: 21.06.2012

Сообщений: 13,488

27.06.2022, 18:16

2

Цитата
Сообщение от NoneN
Посмотреть сообщение

Так как я не знаю, можно ли размешать скрины из acess

Здесь нужно размешать свою архивированную базу, а не ссылки на картинки … . Читайте Правила раздела.



0



0 / 0 / 0

Регистрация: 27.06.2022

Сообщений: 7

27.06.2022, 18:17

 [ТС]

3

Добрый день уважаемые пользователи данного сайте. Мне нужна ваша помощь с одной маленькой ошибкой.
Так как я не знаю, можно ли размешать скрины из acess, то не стану рисковать и оставлю ссылки на скрины.

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

Но при попытки добавить новые товары, появляется данная ошибка

Как я понял, добавлять ссылки тоже нельзя.
Если коротко то:
Для выявления цены с НДС пишу выражение [ЦЕНА]+[ЦЕНА]*[СТАВКА_НДС]
Перехожу на таблицу и появляется нужный результат, но добавить новые данные в таблицу не получается, можно только редактировать имеющиеся.
Вот текст ошибки: Ошибка «Ошибка при определении значения ограничения CHECK.» в условии на значение.

Пытался несколькими простыми движения решить эту проблему, но как видите не смог.
Буду признателен за вашу помощь.



0



0 / 0 / 0

Регистрация: 27.06.2022

Сообщений: 7

27.06.2022, 18:19

 [ТС]

4

Скажите, пожалуйста, нужно именно в архиве кинуть, или можно без него?



0



0 / 0 / 0

Регистрация: 27.06.2022

Сообщений: 7

27.06.2022, 18:24

 [ТС]

5

Вот собственно файл.



0



Модератор

Эксперт MS Access

5426 / 2681 / 661

Регистрация: 12.06.2016

Сообщений: 7,108

27.06.2022, 18:52

6

Цитата
Сообщение от NoneN
Посмотреть сообщение

нужно именно в архиве кинуть, или можно без него?

Без архива БД на сайт не загрузится.
Смотрите список допустимых расширений.

Добавлено через 3 минуты
NoneN,

Кто же Вам так ссылки поуродовал?

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



0



0 / 0 / 0

Регистрация: 27.06.2022

Сообщений: 7

27.06.2022, 19:11

 [ТС]

7

Там вместо звездочек вот это ************

Добавлено через 12 минут
вот это https://paste слитно now.ru/

Добавлено через 3 минуты
В любом случае спасибо, я смог решить проблему. Можете удалить данную тему.



0



Модератор

Эксперт MS Access

5426 / 2681 / 661

Регистрация: 12.06.2016

Сообщений: 7,108

27.06.2022, 19:19

8

NoneN,

Темы не удаляются по желанию пользователя.

Но можете в качестве благотворительности для последующих поколений изложить решение.



0



0 / 0 / 0

Регистрация: 27.06.2022

Сообщений: 7

27.06.2022, 19:27

 [ТС]

9

Я бы с радостью, но как оказалось, проблема не решена. По совету с другого сайта я решил проверить удалив 2 условия, но я случайно удалил и выражение, из за чего подумал что проблема решена. Поэтому, я и дальше нуждаюсь в помощи. ))



0



309 / 332 / 40

Регистрация: 06.03.2022

Сообщений: 1,687

28.06.2022, 01:10

10

прочтите и решите нужно ли Вам это поле

Добавлено через 12 минут
а если его удалить все будет работать….. но над схемой надо подумать



0



Эксперт MS Access

7359 / 4497 / 292

Регистрация: 12.08.2011

Сообщений: 13,719

29.06.2022, 04:14

11

Цитата
Сообщение от SDKU
Посмотреть сообщение

над схемой надо подумать

Проще
1) удалить
2) почитать про нормализацию и смысл ключей
3) построить заново БД

Как правило пункт 2 студенты не выполняют.



0



0 / 0 / 0

Регистрация: 27.06.2022

Сообщений: 7

29.06.2022, 09:09

 [ТС]

12

В общем, вчера мне препод помогла, возможно, сегодня выложу в чём заключалось проблема.



0



D1973

30.06.2022, 05:25


    Маленькая ошибка бд Поставка товаров

Не по теме:

Цитата
Сообщение от Capi
Посмотреть сообщение

Кто же Вам так ссылки поуродовал?

Как правило эти занимается движок форума, ибо нефиг. Положено публиковать материалы на форуме — будь любезен. А ссылки на всякие файлообменники и онлайн-скриншотеры калечатся для невозможности перехода по ним.



0



MS Access. SQL. Ошибка распознавания команд CHECK и DEFAULT в MS ACCESS

В процессе создания SQL-скриптов может появляться ошибка, затем будут выделены операторы CHECK или DEFAULT.
Для устранения ошибки (применимо для MS Access 2007).
Кнопка Office (верхний левый угол) -> Параметры Access ->Конструктор объектов -> Конструктор запросов. Помечаем галочками Синтаксис для SQL Server (ANSI 92): эта БД.

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

Комментарии

Logo
MurCode

  • Форумы
  • Поиск
  • О проекте

Ranger

Дата: 23.09.2003 08:52:47

При запуске на выполнение DTS пакета (для трансформации данных из SQL Server в Access97) при преобразовании одной из таблиц возникает ошибка:

«The number of failing rows exceeds the maximum specified.

Ошибка при определении значения ограничения CHECK.»

Причем возникает она не всегда, (т.к. я пробовал много раз выполнять это же преобразование при одних и тех же данных), т.е иногда трансформация проходит совсем без ошибок.

Что это вообще за ошибка, почему она то возникает, то нет?

Glory

Дата: 23.09.2003 10:25:55

возникает ошибка:

«The number of failing rows exceeds the maximum specified.

Ошибка при определении значения ограничения CHECK.»

«Ошибка при определении значения ограничения CHECK» может означать лишь «Ошибка при определении значения ограничения CHECK» Т.е. что в SQL имеется CHECK, которому не удовлетворяют какие-то записи из Access

Ranger

Дата: 23.09.2003 11:38:24

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

Почему возникновение ошибки носит случайный характер?

Glory

Дата: 23.09.2003 11:42:09

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

Почему возникновение ошибки носит случайный характер?

Ну так выясните какие CHECK constraint-ы у вас существуют для SQL таблицы и проверьте удовлетворяют ли им записи из таблицы Access

Ranger

Дата: 29.09.2003 11:53:54

Снял флажок «Check constrains» в DTS Properties — не помогло, ошибка все равно иногда появляется.

Зато выяснил, что ошибка вероятней всего появляется из-за копирования идентификационных полей.

У таблицы источника на SQL Server 2000 это поле

Type: int

Length: 4

Identify: Yes

Identify Seed: 1

Identify Increment: 1

У таблици приемника на Access 97 поле

Тип: счетчик

Размер: Длинное целое

Новые значения: случайные

Формат поля: основной

Индексированное поле: Да (Совпадения не допускаются)

Если это поле не копировать (значения будут присваиваится автоматически), то ошибки не возникает.

Glory

Дата: 29.09.2003 12:28:46

Если это поле не копировать (значения будут присваиваится автоматически), то ошибки не возникает.

Это означает лишь то, что вы пытаетесь добавить ошибочные данные. Тем более что «Индексированное поле: Да (Совпадения не допускаются) »

Ranger

Дата: 29.09.2003 13:33:29

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

А самое главное (уже в который раз отмечаю), при одних и тех же данных в исходной таблице и «чистой» приемной таблице трансформация данных может провестись как с ошибкой, так и безошибочно. Примерно 1 к 3 соответственно.

Всем привет, друзья! В этом уроке расскажу, что делать если появилась ошибка: Невозможно использовать несколько столбцов в ограничении CHECK уровня столбца. И сразу моделирую следующую ситуацию: у нас есть таблица, в которой создано всего два поля — это поле «дата 1» и поле «дата 2». Мы хотим, чтобы при вводе данных система проверяла, чтобы «дата 2» всегда была бы больше «дата 1».

Невозможно использовать несколько столбцов в ограничении CHECK уровня столбца

Мы знаем, что в свойствах поля есть пункт «правило проверки». Давайте, мы здесь напишем следующее условие: «дата 2» больше поле «дата 1». Сохраняем внесенные изменения и получаем вот такую вот ошибку: «невозможно использовать несколько столбцов в ограничении CHECK уровня столбца».

Невозможно использовать несколько столбцов в ограничении CHECK уровня столбца

Что же делать в таком случае? Так как в данном примере я хочу сравнить значение первого поля со значением другого поля, то правило проверки нужно задавать не в свойствах какого-то одного поля, а в свойствах всей таблицы. Кстати в более ранних версиях свойство «правило проверки» называлось «условие на значение». Давайте, мы данное выражение удалим и перейдем «вкладка» — «конструктор» — страница свойств.

Невозможно использовать несколько столбцов в ограничении CHECK уровня столбца

Здесь также существуют правила проверки, мы нажимаем кнопку с тремя точками, у нас появляется построитель выражений, где у нас уже доступны поля созданной таблицы. Мы пишем «дата два» больше «дата один», нажимаем ok.

Невозможно использовать несколько столбцов в ограничении CHECK уровня столбца

Где «сообщение об ошибке» давайте просто пропишем ошибку словами: «дата 2 всегда больше дата 1».

Невозможно использовать несколько столбцов в ограничении CHECK уровня столбца

Сохраним полученные изменения и перейдем в режим таблицы. Давайте заведем здесь произвольные даты, выберем 21 ноября, здесь выберем 20 (дата 2 всегда больше дата 1).

Невозможно использовать несколько столбцов в ограничении CHECK уровня столбца

Выберем 21 получим такую же ошибку, выберем 22: ошибки нет. Если вы хотите более подробно рассмотреть основные свойства полей таблицы базы данных, то ссылку на этот урок ищите в описании под этим видео. Друзья, надеюсь вы теперь знаете как побороть ошибку: Невозможно использовать несколько столбцов в ограничении CHECK уровня столбца.
Также не забываете, что у нас есть канал, где собрано более 100 уроков, которые помогут вам разобраться в программе Microsoft Access.

Невозможно использовать несколько столбцов в ограничении CHECK уровня столбца

Правила проверки позволяют выполнять проверку данных по мере их ввода в базы данных Access для настольных систем. Для правильного форматирования правил вы можете использовать построитель выражений. Правила проверки можно задавать в конструкторе таблиц или в режиме таблицы. В Access существуют правила проверки трех типов.

1. Правило проверки поля   . Это правило можно использовать для определения условий, которым должны соответствовать все допустимые значения полей. Не указывайте текущее поле в качестве части правила, если вы не используете это поле в функции.  Для ограничения типов символов, которые можно вводить в поле, удобно использовать маску ввода. Например, для полей даты можно задать правило проверки, запрещающее указывать прошедшие даты.

Краткие примеры

Запрет прошедших дат: >=Date()

Общепринятый формат эл. почты: Is Null OR ((Like «*?@?*.?*») AND (Not Like «*[ ,;]*»))

Число не больше пяти: <=5

Неотрицательное значение в поле валюты: >=0

Ограничения числа знаков в строке: Len([StringFieldName])<100

Правило проверки поля в конструкторе таблиц Access

2. Правило проверки записи   . Это правило можно использовать для определения условий, которым должны соответствовать все допустимые записи. С помощью него вы можете сравнивать значения в разных полях. Например, для записи с двумя полями дат можно потребовать, чтобы значения одного поля всегда предшествовали значениям другого поля (то есть чтобы дата начала предшествовала дате окончания).

Краткие примеры

Проверка того, что дата окончания не предшествует дате начала: [Дата окончания]>=[Дата начала]

Ввод даты назначения, которая должна быть не позднее 30 дней с даты заказа: [Дата назначения]<=[Дата заказа]+30

Правило проверки таблицы в конструкторе таблиц Access.

3. Проверка в форме   . Свойство Правило проверки элемента управления формы можно использовать для определения условий, которым должны соответствовать все данные, вводимые в этот элемент. Свойство Правило проверки элемента управления работает аналогично правилу проверки поля. Обычно правило проверки в форме используется вместо правила проверки поля, если оно относится только к данной форме, а не ко всей таблице, независимо от места использования.

В этой статье

  • Обзор

  • Добавление правила проверки в таблицу

  • Проверка имеющихся данных на соответствие новому правилу проверки

  • Добавление правила проверки в элемент управления формы

  • Справочная информация о правилах проверки

Общие сведения

В этой статье описывается, как применять правила и текст проверки к полям таблицы и элементам управления формы. Правила проверки позволяют ограничить ввод данных в поля таблицы и элементы управления формы (например, текстовые поля). Текст проверки отображается для подсказки, если пользователь вводит недопустимые данные.

После ввода данных Access проверяет их на соответствие правилу проверки. Если данные недопустимы, отобразится сообщение.

В Access есть несколько способов ограничения ввода данных.

  • Типы данных   .Каждое поле таблицы имеет тип данных, который ограничивает возможности ввода для пользователей. Например, в поле с типом данных «Дата/время» можно ввести только дату и время, в поле с типом данных «Денежный» — только денежные данные и т. д.

  • Свойства поля   .Некоторые свойства поля ограничивают ввод данных. Например, свойство Размер поля ограничивает количество вводимых данных.

    Можно также использовать свойство Правило проверки, чтобы ограничить ввод строго определенными значениями, и свойство Сообщение об ошибке, чтобы предупреждать пользователей об ошибках. Например, правило >100 And <1000 в свойстве Правило проверки требует ввода значений между 100 и 1000. Правило [ДатаОкончания]>=[ДатаНачала] требует, чтобы вводимая дата окончания совпадала с датой начала либо следовала за ней. Текст типа «Введите значения в диапазоне от 100 до 1000» или «Введите дату окончания, которая не предшествует дате начала», указанный в свойстве Сообщение об ошибке, сообщит пользователям о допущенной ошибке и о том, как ее исправить.

  • Маски ввода   .Маски ввода можно использовать для проверки данных, если требуется, чтобы пользователи вводили значения в определенном формате. Например, с помощью маски ввода можно разрешить вводить даты только в европейском формате (например, 2007.04.14).

Эти методы проверки данных можно использовать как вместе, так и в отдельности. Типы данных являются обязательными и предоставляют наиболее распространенные типы проверки данных.

Дополнительные сведения о типах данных, размерах полей и масках ввода см. в статье Введение в использование типов данных и свойств полей.

Типы правил проверки

Можно создать два основных типа правил проверки.

  • Правило проверки поля   .Это правило используется для проверки введенного значения при переходе к другому полю. Предположим, имеется поле даты, и для свойства Правило проверки задано значение >=#01.01.2010#. Это правило требует, чтобы пользователи вводили дату не ранее 1 января 2010 года. Если указать дату ранее 2010 года, вы не сможете перейти к другому полю в Access, пока не исправите ошибку.

  • Правило проверки записи   .Это правило используется для управления сохранением записи (строки в таблице). В отличие от правила проверки поля, для правила проверки записи используются ссылки на другие поля той же таблицы. Правило проверки записи создается, если требуется сравнить значения в разных полях. Предположим, вам требуется доставить товар в течение 30 дней, и в случае если товар не будет доставлен в этот срок, необходимо возместить клиенту убытки. Можно задать правило проверки [Срок]<=[ДатаЗаказа]+30, чтобы предупредить ввод слишком поздней даты доставки заказа (значение в поле «Срок»).

Если вам непонятен синтаксис правил проверки, см. сведения о синтаксисе и некоторые примеры правил проверки в разделе Данные, которые можно ввести в правило проверки.

Применение правил проверки

Можно задавать правила проверки для полей таблиц и элементов управления в формах. Заданные правила проверки для таблиц применяются также при импорте данных. Чтобы добавить правила проверки в таблицу, откройте нужную таблицу и используйте команды на вкладке Поля ленты. Чтобы добавить правила проверки в форму, откройте форму в режиме макета и добавьте эти правила в свойства отдельных элементов управления.

Из инструкций, приведенных в разделе Добавление правила проверки в таблицу, вы узнаете, как добавлять правила проверки в поля таблицы. А в разделе Добавление правила проверки для элемента управления формы, который вы найдете ниже в этой статье, описано, как добавлять правила в свойства отдельных элементов управления.

Данные, которые можно ввести в правило проверки

Правила проверки могут содержать выражения — функции, возвращающие единственное значение. Выражение можно использовать для выполнения вычислений, обработки знаков или проверки данных. Выражение правила проверки выполняет проверку данных. Например, может проверять наличие одного значения из ряда, например «Токио» OR «Москва» OR «Париж» OR «Хельсинки» . Выражения также могут выполнять математические операции. Например, выражение <100 требует ввода значений, меньших 100. Выражение ([ДатаЗаказа] — [ДатаДоставки]) вычисляет количество дней от даты размещения заказа до даты его исполнения.

Дополнительные сведения о выражениях см. в статье Создание выражений.

К началу страницы

Добавление правила проверки в таблицу

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

Примечания: Правила проверки не поддерживаются в таких типах полей:

  • Счетчик

  • Объект OLE

  • Вложение

  • Код репликации

Создание правила проверки поля

  1. Выберите поле, которое требуется проверить.

  2. На вкладке Поля в группе Проверка поля нажмите кнопку Проверка и выберите пункт Правило проверки поля.

  3. Создайте правило проверки с помощью построителя выражений. Дополнительные сведения об использовании построителя выражений см. в статье Использование построителя выражений.

Создание сообщения для отображения при вводе недопустимых данных

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

  2. На вкладке Поля в группе Проверка поля нажмите кнопку Проверка и выберите пункт Сообщение проверки поля.

  3. Введите соответствующее сообщение. Например, для правила проверки >10 можно ввести сообщение Введите значение больше 10.

Примеры правил проверки поля и сообщений см. в разделе Справочная информация о правилах проверки.

Создание правила проверки записи

  1. Откройте таблицу, в которой требуется выполнить проверку записей.

  2. На вкладке Поля в группе Проверка поля нажмите кнопку Проверка и выберите пункт Правило проверки поля.

  3. Создайте правило проверки с помощью построителя выражений. Дополнительные сведения об использовании построителя выражений см. в статье Использование построителя выражений.

Создание сообщения для отображения при вводе недопустимой записи

  1. Откройте таблицу, для которой требуется создать сообщение на случай ввода недопустимых значений. Таблица уже должна содержать правило проверки.

  2. На вкладке Поля в группе Проверка поля нажмите кнопку Проверка и выберите пункт Сообщение о проверке записи.

  3. Введите соответствующее сообщение. Например, для правила проверки [ДатаНачала]<[ДатаОкончания] можно ввести сообщение «Дата начала должна предшествовать дате окончания».

К началу страницы

Проверка имеющихся данных на соответствие новому правилу проверки

При добавлении правила проверки в существующую таблицу может потребоваться применить правило для проверки всех имеющихся данных на допустимость.

  1. Откройте таблицу для проверки в режиме конструктора.

    На вкладке Конструктор в группе Сервис нажмите кнопку Проверка условий.

  2. Нажмите кнопку Да, чтобы закрыть сообщение и начать проверку.

  3. Если будет предложено сохранить таблицу, нажмите кнопку Да.

  4. В процессе работы могут выводиться и другие предупреждения. Прочтите инструкции в каждом из них и нажмите соответствующие кнопки Да или Нет, чтобы завершить или прекратить проверку.

К началу страницы

Добавление правила проверки в элемент управления формы

Можно использовать свойства элементов управления Правило проверки и Сообщение об ошибке для проверки данных, вводимых в элемент управления, и предупреждения пользователей о вводе недопустимых данных.

Совет:  При автоматическом создании формы из таблицы с помощью одной из команд в группе «Формы» на ленте все проверки поля, имеющиеся в базовой таблице, наследуются соответствующими элементами управления в форме.

Элемент управления и поле таблицы, с которым он связан, могут иметь разные правила проверки. Это позволяет при необходимости установить для формы большее количество ограничений, чем для таблицы. В этом случае сначала будет применяться правило формы, а затем — правило таблицы. Если для таблицы установлено больше ограничений, чем для формы, приоритет отдается правилам, заданным для поля таблицы. Если правила являются взаимоисключающими, ввод каких-либо данных будет невозможен.

Предположим, что к полю даты в таблице применено следующее правило:

<#01.01.2010#

А затем к элементу управления формы, связанному с этим полем данных, применено другое правило:

>=#01.01.2010#

Таким образом, в поле данных необходимо вводить значения, предшествующие 2010 году, а в элементе управления формы — не ранее этого года. Согласно этим правилам нельзя ввести никакую дату.

Создание правила проверки для элемента управления

  1. Щелкните правой кнопкой мыши форму, которую требуется изменить, и выберите пункт Режим макета.

  2. Щелкните правой кнопкой мыши элемент управления, который требуется изменить, и выберите пункт Свойства для отображения окна свойств.

  3. Откройте вкладку Все и введите правило проверки в поле свойства Правило проверки.

    Совет:  Нажмите кнопку Построить для запуска построителя выражений.

    Дополнительные сведения об использовании построителя выражений см. в статье Использование построителя выражений.

  4. Введите сообщение об ошибке в поле свойства Сообщение об ошибке.

К началу страницы

Справочная информация о правилах проверки

В правилах проверки используется синтаксис выражений Access. Дополнительные сведения о выражениях см. в статье Введение в использование выражений.

Примеры правил и текста проверки

Правило проверки

Текст проверки

<>0

Введите значение, отличное от нуля.

>=0

Значение не должно быть отрицательным.

-или-

Введите положительное число.

0 or >100

значение должно быть равно 0 либо быть больше 100.

BETWEEN 0 AND 1

Введите значение со знаком процента. (Для полей с числовыми значениями процентов.)

<#01.01.2007#

Введите дату, предшествующую 2007 году.

>=#01.01.2007# AND <#01.01.2008#

Укажите дату в 2007 году.

<Date()

Дата рождения не может быть в будущем.

StrComp(UCase([Фамилия]),
[Фамилия],0) = 0

Заполните поле «Фамилия» прописными буквами.

>=Int(Now())

Ведите текущую дату.

М Or Ж

Введите «М» для мужского пола, «Ж» — для женского.

LIKE «[A-Z]*@[A-Z].com» OR «[A-Z]*@[A-Z].net» OR «[A-Z]*@[A-Z].org»

Введите допустимый адрес электронной почты, оканчивающийся на .com, .net или .org.

[Срок]<=[ДатаЗаказа]+30

Заказ должен быть исполнен не позже чем через 30 дней.

[ДатаОкончания]>=[ДатаНачала]

Дата окончания не должна предшествовать дате начала.

Примеры синтаксиса для основных операторов правил проверки

Оператор

Функция

Пример

NOT

Проверяет наличие противоположных значений. Используется перед любым оператором сравнения, кроме IS NOT NULL.

NOT > 10 (то же, что и <=10).

IN

Проверяет наличие значений, равных существующим элементам списка. Значение, используемое в сравнении, должно быть списком значений, разделенных запятыми и заключенных в круглые скобки.

IN («Токио», «Париж», «Москва»)

BETWEEN

Проверяет принадлежность к диапазону значений. Необходимо использовать два значения для сравнения — верхний и нижний пределы — и разделять эти значения с помощью разделителя AND.

BETWEEN 100 AND 1000 (то же, что и >=100 AND <=1000)

LIKE

Сопоставляет образец строки с текстовым полем или полем МЕМО.

LIKE «Гео*»

IS NOT NULL

Требует ввода значения в поле. Результат такой же, как при задании для свойства Обязательное поле значения Да. Но если свойство Обязательное поле включено, а пользователю не удается ввести значение, в Access отображается непонятное сообщение об ошибке. Удобнее использовать в базе данных оператор IS NOT NULL и ввести информативное сообщение в свойстве Текст проверки.

IS NOT NULL

AND

Указывает, что все части правила проверки должны быть истинными.

>= #01.01.2007# AND <=#06.03.2008#

Примечание: Для объединения правил проверки можно также использовать оператор AND. Например: NOT «КНР» AND LIKE «Р*».

OR

Указывает, что некоторые (но не все) части правила проверки должны быть истинными.

«Январь» OR «Февраль»

<

Меньше.

<=

Меньше или равно.

>

Больше.

>=

Больше или равно.

=

Равно.

<>

Не равно.

Использование подстановочных знаков в правилах проверки

В правилах проверки можно использовать подстановочные знаки. Имейте в виду, что Access поддерживает два набора подстановочных знаков: ANSI-89 и ANSI-92. В этих стандартах используются различные наборы подстановочных знаков.

По умолчанию, для всех файлов формата ACCDB и MDB используется стандарт ANSI-89.

Можно изменить стандарт ANSI для базы данных на стандарт ANSI-92, выполнив следующие действия.

  1. На вкладке Файл выберите пункт Параметры.

  2. В диалоговом окне Параметры Access выберите пункт Конструкторы объектов.

  3. В разделе Конструктор запросов в группе Синтаксис для SQL Server (ANSI 92) установите флажок эта база данных.

Дополнительные сведения об использовании подстановочных знаков и стандартах ANSI для языка SQL см. в статье Справочные сведения о подстановочных знаках в Access.

К началу страницы

Consider the following table with a constraint that’s a bit daft but simple enough to demonstrate my point. Note that, to keep things very simple, the constraint’s criteria only involve literal values. The column ID only exists because a table must have at least one column (!!) but that column is not involved in the constraint. While a little daft (hence the name) this is perfectly legal syntax and similar to adding WHERE 0 = 1 to a SELECT query to ensure it returns zero rows.

(Standard SQL DDL code, will execute in ACE/Jet’s ANSI-92 Query Mode)

CREATE TABLE Test1 
(
   ID INTEGER NOT NULL, 
   CONSTRAINT daft_1 CHECK (5 = NULL)
);

The following INSERT succeeds:

INSERT INTO Test1 (ID) VALUES (1);

This is expected behaviour. The predicate 5 = NULL should evaluate to UNKNOWN. The INSERT is ‘given the benefit of the doubt’ and succeeds. No problem there.

Consider this similar example using the IN operator:

CREATE TABLE Test2 
(
   ID INTEGER NOT NULL, 
   CONSTRAINT daft_2 CHECK (5 IN (0, 1, NULL))
);

The following INSERT fails because the constraint bites:

INSERT INTO Test2 (ID) VALUES (1);

This is unexpected behviour, by me at least. I would expect the 5 IN (0, 1, NULL) to again be evaluated as UNKNOWN and the INSERT to succeed for the same reasons as the first example.

I would expect the logic in the second example to be the same as the following third example:

CREATE TABLE Test3
(
   ID INTEGER NOT NULL, 
   CONSTRAINT daft_3 CHECK((5 = 0) OR (5 = 1) OR (5 = NULL))
);

The following INSERT succeeds:

INSERT INTO Test3 (ID) VALUES (1);

This is expected behaviour.

I’ve tested all three examples on SQL Server and the all work as I expect i.e. all three INSERT statements succeed. In fact, examining the INFORMATION SCHEMA reveals that for the second example SQL Server as ‘helpfully’ (grrr) rewritten the constraint’s clause to replace the IN operator with

((5)=NULL OR (5)=(1) OR (5)=(0))

So, for ACE/Jet, what is ‘broken’ here: the IN operator or the CHECK constraint?

Here’s some VBA code to reproduce the problem using a NULLable column; also demonstrates that dropping the constraint allows the INSERT to succeed:

Sub TestJetInCheck()

  On Error Resume Next
  Kill Environ$("temp") & "\DropMe.mdb"
  On Error GoTo 0

  Dim cat
  Set cat = CreateObject("ADOX.Catalog")

  With cat
    .Create _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & _
        Environ$("temp") & "\DropMe.mdb"

    With .ActiveConnection

      Dim Sql As String
      Sql = _
          "CREATE TABLE Test" & vbCr & _
          "(" & vbCr & _
          "   ID INTEGER, " & vbCr & _
          "   CONSTRAINT daft_constraint " & vbCr & _
          "      CHECK (5 IN (0, 1, NULL))" & vbCr & _
          ");"
      .Execute Sql

      Sql = "INSERT INTO Test (ID) VALUES (1);"

      On Error Resume Next
      .Execute Sql
      If Err.Number <> 0 Then
        MsgBox Err.Description
      Else
        MsgBox "{{no error}}"
      End If
      On Error GoTo 0

      .Execute "ALTER TABLE Test DROP CONSTRAINT daft_constraint;"

      On Error Resume Next
      .Execute Sql
      If Err.Number <> 0 Then
        MsgBox Err.Description
      Else
        MsgBox "{{no error}}"
      End If
      On Error GoTo 0

    End With

    Set .ActiveConnection = Nothing
  End With
End Sub

EDIT: I just thought to try this:

SELECT NULL IN (1);
— returns NULL

SELECT 1 IN (NULL)
— returns zero i.e. FALSE

Like this post? Please share to your friends:
  • Ошибка при открытии базы данных учетных записей
  • Ошибка при отключении найти айфон
  • Ошибка при определении веса плода узи
  • Ошибка при обработке пакета проблемы зависимостей
  • Ошибка при открытии архива rar