1. Главная страница » Компьютеры

Access пропущен оператор в выражении запроса

Автор: | 16.12.2019

В Microsoft Access часто приходится работать со значениями, которые не хранятся непосредственно в базе данных. Например, вам может потребоваться вычислить налог с оборота для заказа или итоговую сумму заказа. Такие значения вычисляются с помощью выражений. Чтобы использовать выражения, их следует записать, используя правильный синтаксис. Синтаксис — это набор правил, по которым сочетаются слова и символы в выражении. Сначала выражения в Access могут показаться сложными для восприятия. Но если разобраться в их синтаксисе и немного попрактиковаться, работа с выражениями не вызовет затруднений.

В этой статье

Общие сведения о выражениях

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

Например, это выражение содержит все четыре указанных компонента:

Sum() — встроенная функция;

[Purchase Price] — идентификатор;

Это выражение можно использовать в текстовом поле в нижнем колонтитуле формы или отчета, чтобы вычислить налог с продаж для группы товаров.

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

Это выражение возвращает следующие значения:

True , если сравнение выполняется с числом, которое больше нуля;

False , если сравнение выполняется с числом, которое меньше нуля.

Вы можете использовать это выражение в свойстве Val >ControlSource (Данные) и DefaultValue (Значение по умолчанию). Вы также можете использовать выражения в свойстве ValidationRule (Правило проверки) поля таблицы.

Компоненты выражений

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

Идентификаторы. Общий вид:

Достаточно указать столько частей идентификатора, чтобы он был уникальным в контексте выражения. Нередко идентификатор имеет форму [Object name] .

Функции. Общий вид:

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

Операторы. Общий вид:

Существуют исключения, которые описаны в разделе Операторы.

Константы. Общий вид:

Значения. Значения могут использоваться в различных частях выражения.

Объекты, семейства и свойства

Все таблицы, запросы, формы, отчеты и поля в базе данных Access также называются объектами. У каждого объекта есть имя. Некоторые объекты уже имеют имена, например таблица "Контакты" в базе данных, созданной на основе шаблона "Контакты" Microsoft Office Access. При создании объекта ему следует дать имя.

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

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

На следующей схеме показана связь между семействами, объектами и свойствами:

Идентификаторы

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

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

В других случаях необходимо явно указать части идентификатора, чтобы ссылка работала. Это требуется, если идентификатор не является уникальным в контексте выражения. Если есть неоднозначность, нужно явно указать достаточно частей идентификатора, чтобы сделать его уникальным. Предположим, что вы создаете запрос, который использует таблицы Products и Orders, и обе из них содержат поля ProductID. В таком случае идентификатор, используемый в запросе для ссылки на это поле, должен включать в себя имя таблицы, например:

Операторы идентификаторов. Существуют три оператора, которые можно использовать в идентификаторах:

оператор "восклицательный знак" ( ! );

оператор "квадратные скобки" ( [ ] ).

Каждая часть идентификатора заключается в квадратные скобки, а затем они соединяются с помощью восклицательного знака или точки. Например, идентификатор для поля Last Name в таблице Employees будет иметь вид [Employees]![Last Name] . Оператор "восклицательный знак" означает, что объект, следующий за ним, относится к семейству, указанному до него. В этом случае [Last Name] — объект поля, которое принадлежит к семейству [Employees], являющемуся объектом таблицы.

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

Функции, операторы, константы и значения

Чтобы создать выражение, следует указать не только идентификаторы, но также и действие, которое требуется выполнить. Для выполнения действий в выражении используются функции, операторы и константы.

Функции

Функция представляет собой процедуру, которую можно использовать в выражении. Некоторые функции, такие как Date, не требуют входных данных, однако большинству функций нужны аргументы.

В примере, приведенном в начале этой статьи, функция DatePart использует два аргумента: интервал со значением "yyyy" и дату со значением [Customers]![BirthDate] . Функции DatePart требуются по крайней мере эти два аргумента (интервал и дата), но можно указать до четырех аргументов.

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

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

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

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

Функция Format позволяет применить формат к идентификатору или к результату другой функции.

Функция IIf оценивает выражение как истинное или ложное, а затем возвращает одно значение, если выражение истинно, или другое, если оно ложно.

Функция InStr используется для поиска позиции знака или строки в другой строке. Искомая строка обычно берется из поля, заданного идентификатором.

Функции Left, Mid и Right используются для извлечения знаков из строки, начиная с первого символа (Left), определенной позиции в середине (Mid) или последнего символа (Right). Они часто используются в сочетании с функцией InStr. Строка, из которой извлекаются символы, обычно берется из поля, заданного идентификатором.

Список функций по категориям см. в этой статье.

Оператор

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

арифметические операторы, например знак "плюс" ( + );

операторы сравнения, например знак равенства ( = );

логические операторы, например Not ;

операторы объединения, например & ;

специальные операторы, например Like .

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

Арифметические операторы используется для вычисления значения на основе нескольких чисел или изменения положительного знака числа на отрицательный.

Сложение двух чисел.

Вычисление разницы между двумя числами или вывод отрицательного значения числа.

Перемножение двух чисел.

Деление первого числа на второе.

Округление обоих чисел до целых, деление первого числа на второе и усечение результата до целого.

Возврат остатка от деления первого числа на второе.

[Зарегистрировано] Mod [Комнаты]

Возведение числа в указанную степень.

Операторы сравнения позволяют сравнивать значения. Они возвращают результат True (истина), False (ложь) или Null (неопределенное значение).

Определяет, что первое значение меньше второго.

Определяет, что первое значение не больше второго.

Определяет, что первое значение больше второго.

Определяет, что первое значение не меньше второго.

Определяет, что первое значение равно второму.

Определяет, что первое значение не равно второму.

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

Используйте логические операторы для объединения двух значений и возврата результата true (истина), false (ложь) или Null. Логические операторы также называются булевыми.

Выраж1 And Выраж2

Возвращает значение "Истина", если выражения 1 и 2 имеют значение "Истина".

Выраж1 Or Выраж2

Возвращает значение "Истина", если хотя бы одно из выражений 1 и 2 имеет значение "Истина".

Выраж1 Eqv Выраж2

Возвращает значение "Истина", если оба выражения 1 и 2 имеют значение "Истина" или оба выражения 1 и 2 равны "Ложь".

Возвращает "Истина", если выражение не имеет значения "Истина".

Выраж1 Xor Выраж2

Возвращает значение "Истина", если одно и только одно из выражений 1 и 2 имеет значение "Истина".

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

Объединение двух строк в одну.

Объединение двух строк в одну и распространение значений Null.

Специальные операторы используются, как показано в следующей таблице:

Is Null or Is Not Null

Определяет, равно ли значение Null или Not Null.

Ищет строковые значения с помощью подстановочных операторов ? и * .

Between val1 And val2

Определяет, находится ли число или дата в пределах диапазона.

Определяет, входит ли строковое значение в множество.

Константы

Константа — это известное постоянное значение, которое может быть использовано в выражении. В Access есть четыре часто применяемых константы:

True указывает, что что-то является логической истиной;

False указывает, что что-то является логической ложью;

Null указывает на отсутствие известного значения;

"" (empty string) указывает, что значение является пустым.

Константы могут использоваться в качестве аргументов функций и в выражениях как часть условия. Например, константу "пустая строка" ( "" ) можно использовать в качестве условия для столбца в запросе, чтобы вернуть значения полей этого столбца: <>"" . В данном примере <> — оператор, а "" — константа. Вместе они определяют, что идентификатор нужно сравнить с пустой строкой. Выражение возвращает значение True, если значение идентификатора не равно пустой строке.

Будьте осторожны при использовании константы Null . В большинстве случаев использование константы Null в сочетании с оператором сравнения приводит к ошибке. Если в выражении требуется сравнить значение с Null , используйте оператор Is Null или Is Not Null .

Значения

В выражениях можно использовать литералы (например, число 1254 или строку "Введите число от 1 до 10"). Также можно использовать числовые значения, которые могут состоять из нескольких цифр, а также знака и запятой. При отсутствии знака Access считает значение положительным. Чтобы сделать значение отрицательным, добавьте знак "минус" ( -). Также можно использовать научную форму записи. Для этого добавьте символ "E" или "e" и знак экспоненты (например, 1,0E-6).

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

Например, если ввести слово Paris , Access отобразит в выражении строку "Paris". Если требуется, чтобы результатом выражения была строка, заключенная в кавычки, вложенная строка заключается либо в одинарные кавычки ( ‘ ), либо в три пары двойных кавычек ( " ). Например, следующие выражения эквивалентны:

При использовании значений даты и времени заключайте значения в символы решетки ( # ). Например, #03.07.17#, #7-Мар-17# и #Мар-7-2017# — допустимые значения даты и времени. Когда приложение Access встречает допустимое значение даты и времени, заключенное в символы "#", значение автоматически обрабатывается как имеющее тип даты и времени.

Максимальное число уровней вложенности в веб-базах данных — 65

Выражения с более чем 65 уровнями вложенности не будут работать в браузере, поэтому их не следует использовать в веб-базах данных Access. Вы не увидите сообщение об ошибке — выражение просто не будет работать.

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

Любые идеи, почему только форма генерирует синтаксическую ошибку или как это исправить?

Мне удалось быстро исправить это, перейдя в "Дизайн-вид формы" и положив [] на любые имена полей, в которых были пробелы. Теперь я могу использовать встроенные фильтры без раздражающего всплывающего окна о проблемах с синтаксисом.

У меня была такая же проблема. Как говорит Дедрен, проблема заключается не в запросе, а в источнике управления объектами формы. Поместите [] вокруг каждого объекта Control Source. например: Contol Source: [Product number] , Control Source: Salesperson.[Salesperson number] и т.д.

Makita рекомендует перейти к исходной таблице, на которую вы ссылаетесь в своем запросе, и переименовать поле, чтобы не было пробелов, например: SalesPersonNumber , ProductNumber и т.д. Это также решит многие будущие проблемы. Лучшее из удачи!

Попробуйте сделать имена полей законными, удалив пробелы. Это длинный выстрел, но он действительно помог мне раньше.

Эти ответы неверны. Существует фундаментальное отсутствие знаний в вашем мозгу, что я сейчас исправлю.

Ваша главная проблема здесь — ваша схема именования. Он многословный, содержит нежелательные символы и ужасно непоследователен.

Первая. Таблица, которая называется Salesperson , не обязательно должна иметь каждое поле в таблице с именем Salesperson.Salesperson number , Salesperson.Salesperson email . Вы уже находитесь в таблице Salesperson . Все в этой таблице относится к Salesperson . Вам не нужно продолжать это говорить.

Вместо этого используйте ID , Email . Не используйте Number , потому что это, вероятно, зарезервированное слово. Вы действительно пытаетесь ввести [] вокруг каждого имени поля для срока службы вашей базы данных?

Первичные ключи таблицы Student могут быть ID или StudentID , но быть последовательными. Внешние ключи должны быть только обозначены таблицей, на которую указывает, а затем ID . Например: Student.ID и Appointment.StudentID . ID всегда заглавная. Мне все равно, не сообщит ли вам ваш IDE, потому что везде, но ваша IDE будет ID . Даже Access нравится ID .

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

Вместо phone number используйте PhoneNumber или даже лучше, просто, Phone . Если вы выберете what time user made the withdrawal , вам придется вводить его каждый раз.

Третий. И это один из наиболее важных: всегда быть последовательным в любой выбранной вами схеме именования. Вы должны быть в состоянии сказать: "Мне нужен почтовый код из этой таблицы, его имя будет PostalCode". Вы должны знать, что даже не нужно искать его, потому что вы согласны в своем соглашении об именах.

Recap: Тесный, а не подробный. Держите имена короткими без пробелов, не повторяйте имя таблицы, не используйте зарезервированные слова и заглавные буквы каждого слова. Прежде всего, будьте последовательны.

Надеюсь, вы примете мой совет. Это правильный способ сделать это. Мой ответ правильный. Вы должны быть чрезвычайно педантичным с вашей схемой именования до абсолютной одержимости на всю оставшуюся жизнь на этой планете.

ПРИМЕЧАНИЕ. Фактически вам нужно изменить имя поля в представлении проекта таблицы и в запросе.

Версия системы:
7.78 (18.11.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Последний вопрос:
17.11.2019, 18:31
Всего: 150984

Последний ответ:
18.11.2019, 04:40
Всего: 259421

Последняя рассылка:
17.11.2019, 22:45

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

Gluck
Статус: 7-й класс
Рейтинг: 938
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 570
puporev
Статус: Профессионал
Рейтинг: 308
Перейти к консультации №:

Здравствуйте!
При отладке ниже приведёного кода выходит ошибка:
Ошибка синтаксиса(пропущен оператор) в выражении запроса ‘STAVKA*’40000’/36 SUMMA’

Состояние: Консультация закрыта

Здравствуйте, KuchumHan!
1. У Вас после «/36» и перед «SUMMA» пропущена запятая, если «SUMMA» это поле таблицы. Если же словом «SUMMA» Вы хотите обозначить столбец, в котором вычисляете выражение, то необходимо написать «AS Summa».
2. В строчке где запрос у Вас закомментирован Вы совершенно зря ставите расширение «.MDB». Дело в том, что файл с расширением «.MDB» это база данных, которая может содержать несколько таблиц, а запрсы проводятся исключительно к таблицам, а не к базам данных.
3. Там где Вы подставляете значения из Edit1.Text, могут быть лишние пробелы, которые могут совершенно исказить смысл выражения, поэтому лучше всего ведущие и концевые пробелы убирать функцией Trim().
4. Просто пожелание. Пишите большими буквами только операторы SQL, а названия таблиц и названия полей пишите маленькими буквами, тогда Ваше выражение будет более удобно читать и таким образом Вы сразу будете видеть синтаксическую ошибку в построенном Вами выражении.

0

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

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

«>

Читайте также:  Bios basic input output system является

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *