В Microsoft Access часто приходится работать со значениями, которые не хранятся непосредственно в базе данных. Например, вам может потребоваться вычислить налог с оборота для заказа или итоговую сумму заказа. Такие значения вычисляются с помощью выражений. Чтобы использовать выражения, их следует записать, используя правильный синтаксис. Синтаксис — это набор правил, по которым сочетаются слова и символы в выражении. Сначала выражения в Access могут показаться сложными для восприятия. Но если разобраться в их синтаксисе и немного попрактиковаться, работа с выражениями не вызовет затруднений.
В этой статье
Общие сведения о выражениях
Выражение — это сочетание некоторых или всех из следующих компонентов: встроенных или пользовательских функций, идентификаторов, операторов, значений и констант. Результатом вычисления выражения является одно значение.
Например, это выражение содержит все четыре указанных компонента:
=Sum([Purchase Price])*0.08
-
Sum() — встроенная функция;
-
[Purchase Price] — идентификатор;
-
* — математический оператор;
-
0.08 — константа.
Это выражение можно использовать в текстовом поле в нижнем колонтитуле формы или отчета, чтобы вычислить налог с продаж для группы товаров.
Выражения могут быть гораздо сложнее или проще данного примера. Например, следующее логический выражение состоит только из оператора и константы:
>0
Это выражение возвращает следующие значения:
-
True, если сравнение выполняется с числом, которое больше нуля;
-
False, если сравнение выполняется с числом, которое меньше нуля.
Вы можете использовать это выражение в свойстве ValidationRule (Правило проверки) элемента управления или поля таблицы, чтобы разрешить ввод только положительных значений. Выражения широко используются для вычислений, обработки символов и проверки данных. У всех объектов — таблиц, запросов, форм, отчетов и макросов — есть свойства, принимающие выражения. Например, для элемента управления можно использовать выражения в свойствах ControlSource (Данные) и DefaultValue (Значение по умолчанию). Вы также можете использовать выражения в свойстве ValidationRule (Правило проверки) поля таблицы.
Компоненты выражений
Чтобы создать выражение, следует объединить идентификаторы с помощью функций, операторов, констант и значений. Любое допустимое выражение должно содержать по крайней мере одну функцию или один идентификатор, а также может включать в себя константы или операторы. Выражение можно также использовать как часть другого выражения — обычно в качестве аргумента функции. Это называется вложением выражений.
-
Идентификаторы Общий вид:
[Collection name]![Object name].[Property name]
Достаточно указать столько частей идентификатора, чтобы он был уникальным в контексте выражения. Нередко идентификатор имеет форму [Object name].
-
Функции Общий вид:
Function(argument, argument)
Один из аргументов обычно представляет собой идентификатор или выражение. Для некоторых функций аргументы не нужны. Прежде чем использовать определенную функцию, ознакомьтесь с ее синтаксисом. Дополнительные сведения см. в статье Функции (по категориям).
-
Операторы Общий вид:
Identifier operator identifier
Существуют исключения, которые описаны в разделе Операторы.
-
Константы Общий вид:
Identifier comparison_operator constant
-
Значения Значения могут использоваться в различных частях выражения.
Объекты, семейства и свойства
Все таблицы, запросы, формы, отчеты и поля в базе данных Access также называются объектами. У каждого объекта есть имя. Некоторые объекты уже имеют имена, например таблица "Контакты" в базе данных, созданной на основе шаблона "Контакты" Microsoft Office Access. При создании объекта ему следует дать имя.
Набор всех объектов определенного типа называется семейством. Например, набор всех таблиц в базе данных является семейством. Некоторые объекты, являющиеся частью семейства в базе данных, могут также быть семействами, содержащими другие объекты. Например, объект таблицы — это семейство, содержащее объекты полей.
Объекты имеют свойства, которые описывают и позволяют изменять их характеристики. Например, у объекта запроса есть свойство Представление по умолчанию, описывающее отображение запроса при его выполнении и позволяющее настроить его.
На следующей схеме показана связь между семействами, объектами и свойствами:
|
3 — свойство 2 — объект 1 — коллекция |
Идентификаторы
При использовании семейства, объекта или свойства в выражении вы ссылаетесь на него с помощью идентификатора. Идентификатор содержит имена самого элемента и элемента, к которому он относится. Например, идентификатор поля включает в себя имя поля и имя таблицы, в которую оно входит. Пример такого идентификатора:
[Customers]![BirthDate]
В некоторых случаях идентификатором служит само имя элемента. Это справедливо, если имя элемента уникально в контексте создаваемого выражения. Оставшаяся часть идентификатора подразумевается по контексту. Например, при создании запроса, использующего только одну таблицу, идентификатором может быть имя поля без имени таблицы, так как имена полей внутри таблицы уникальны. Так как используется только одна таблица, имя таблицы в любом идентификаторе, используемом в запросе для ссылки на поле, подразумевается.
В других случаях необходимо явно указать части идентификатора, чтобы ссылка работала. Это требуется, если идентификатор не является уникальным в контексте выражения. При наличии неоднозначности необходимо явно указать достаточно частей идентификатора, чтобы сделать его уникальным. Например, предположим, что вы создаете запрос, который использует таблицы "Товары" и "Заказы", и обе из них содержат поля КодТовара. В таком случае идентификатор, используемый в запросе для ссылки на поле КодТовара, должен включать имя таблицы в дополнение к имени поля. Например:
[Products]![ProductID]
Операторы идентификаторов. Существуют три оператора, которые можно использовать в идентификаторах:
-
оператор "восклицательный знак" (!);
-
оператор "точка" (.)
-
оператор "квадратные скобки" ([ ]).
Каждая часть идентификатора заключается в квадратные скобки, а затем они соединяются с помощью восклицательного знака или точки. Например, идентификатор для поля Last Name в таблице Employees будет иметь вид [Employees]![Last Name]. Оператор "восклицательный знак" означает, что объект, следующий за ним, относится к семейству, указанному до него. В этом случае [Last Name] — объект поля, которое принадлежит к семейству [Employees], являющемуся объектом таблицы.
Строго говоря, не всегда обязательно заключать идентификатор или его части в квадратные скобки. Если в идентификаторе не содержится пробелов или других специальных знаков, квадратные скобки будут добавлены автоматически. Однако самостоятельное включение квадратных скобок является хорошей практикой, так как позволяет избежать ошибок, а также служит визуальным обозначением идентификатора в выражении.
Функции, операторы, константы и значения
Чтобы создать выражение, следует указать не только идентификаторы, но также и действие, которое требуется выполнить. Для выполнения действий в выражении используются функции, операторы и константы.
Функции
Функция представляет собой процедуру, которую можно использовать в выражении. Некоторые функции, такие как Date, не требуют входных данных, однако большинству функций нужны аргументы.
В примере, приведенном в начале этой статьи, функция DatePart использует два аргумента: интервал со значением "yyyy" и дату со значением [Customers]![BirthDate]. Функции DatePart требуются по крайней мере эти два аргумента (интервал и дата), но можно указать до четырех аргументов.
В следующем списке приведено несколько функций, часто используемых в выражениях. Для получения дополнительных сведений о синтаксисе функции щелкните ее ссылку.
-
Функция Date позволяет вставить текущую системную дату в выражение. Она обычно используется в сочетании с функцией Format и с идентификаторами полей, содержащих значения даты и времени.
=Date()
-
С помощью функции DatePart можно задать или извлечь часть даты, которая обычно берется из поля, заданного идентификатором, но также может возвращаться другой функцией, например Date.
DatePart ( "yyyy", Date())
-
Функция DateDiff используется для определения разницы между двумя датами. Обычно это дата, которая берется из поля, заданного идентификатором, и дата, возвращаемая функцией Date.
=DateDiff(“d”, Now(), [Orders].[ReceiveBefore])-10
-
Функция Format позволяет применить формат к идентификатору или к результату другой функции.
Format([Date],"ww")=Format(Now(),"ww")-1
-
Функция IIf оценивает выражение как истинное или ложное, а затем возвращает одно значение, если выражение истинно, или другое, если оно ложно.
=IIf([CountryRegion]="Italy", "Italian", "Some other language")
-
Функция InStr используется для поиска позиции знака или строка в другой строке. Искомая строка обычно берется из идентификатора поля.
InStr(1,[IPAddress],".")
-
Функции Left, Mid и Right используются для извлечения знаков из строки, начиная с первого символа (Left), определенной позиции в середине (Mid) или последнего символа (Right). Они часто используются в сочетании с функцией InStr. Строка, из которой извлекаются символы, обычно берется из поля, заданного идентификатором.
Left([ProductName], 1) Right([AssetCode], 2) Mid([Phone],2,3)
Список функций по категориям см. в этой статье.
Оператор
Оператор — это слово или символ, обозначающий определенную арифметическую или логическую операцию с элементами выражения. Существуют следующие типы операторов:
-
арифметические операторы, например знак "плюс" (+);
-
операторы сравнения, например знак равенства (=);
-
логические операторы, например Not;
-
операторы объединения, например &;
-
специальные операторы, например Like.
Операторы обычно используются для обозначения отношения между двумя идентификаторами. В приведенных ниже таблицах описаны операторы, используемые в выражениях Access.
Арифметические операторы
Арифметические операторы используется для вычисления значения на основе нескольких чисел или изменения положительного знака числа на отрицательный.
Оператор |
Назначение |
Пример |
---|---|---|
+ |
Сложение двух чисел. |
[ПромежуточныеИтоги] + [НалогСПродаж] |
- |
Вычисление разницы между двумя числами или вывод отрицательного значения числа. |
[Цена]-[Скидка] |
* |
Перемножение двух чисел. |
[Количество]*[Цена] |
/ |
Деление первого числа на второе. |
[Итого]/[КоличествоЕдиниц] |
\ |
Округление обоих чисел до целых, деление первого числа на второе и усечение результата до целого. |
[Зарегистрировано]\[Комнаты] |
Mod |
Возврат остатка от деления первого числа на второе. |
[Зарегистрировано] Mod [Комнаты] |
^ |
Возведение числа в указанную степень. |
Число ^ Степень |
Операторы сравнения
Операторы сравнения позволяют сравнивать значения. Они возвращают результат True (истина), False (ложь) или Null (неопределенное значение).
Оператор |
Назначение |
---|---|
< |
Определяет, что первое значение меньше второго. |
<= |
Определяет, что первое значение не больше второго. |
> |
Определяет, что первое значение больше второго. |
>= |
Определяет, что первое значение не меньше второго. |
= |
Определяет, что первое значение равно второму. |
<> |
Определяет, что первое значение не равно второму. |
Во всех случаях, когда первое или второе значение равно Null, результатом также является Null. Так как Null представляет собой неизвестное значение, результат сравнения с Null также неизвестен.
Логические операторы
Используйте логические операторы для объединения двух значений и возврата результата true (истина), false (ложь) или Null. Логические операторы также называются булевыми.
Оператор |
Использование |
Описание |
---|---|---|
And |
Выраж1 And Выраж2 |
Возвращает значение "Истина", если выражения 1 и 2 имеют значение "Истина". |
Or |
Выраж1 Or Выраж2 |
Возвращает значение "Истина", если хотя бы одно из выражений 1 и 2 имеет значение "Истина". |
Eqv |
Выраж1 Eqv Выраж2 |
Возвращает значение "Истина", если оба выражения 1 и 2 имеют значение "Истина" или оба выражения 1 и 2 равны "Ложь". |
Not |
Not Выраж |
Возвращает "Истина", если выражение не имеет значения "Истина". |
Xor |
Выраж1 Xor Выраж2 |
Возвращает значение "Истина", если одно и только одно из выражений 1 и 2 имеет значение "Истина". |
Операторы объединения
С помощью операторов объединения можно объединить два текстовых значения в одну строку.
Оператор |
Использование |
Описание |
---|---|---|
& |
строка1 & строка2 |
Объединение двух строк в одну. |
+ |
строка1 + строка2 |
Объединение двух строк в одну и распространение значений Null. |
Специальные операторы
Специальные операторы используются, как показано в следующей таблице:
Оператор |
Описание |
Дополнительные сведения |
---|---|---|
Is Null or Is Not Null |
Определяет, равно ли значение Null или Not Null. |
|
Like "pattern" |
Ищет строковые значения с помощью подстановочных операторов ? и *. |
|
Between val1 And val2 |
Определяет, находится ли число или дата в пределах диапазона. |
|
In(string1,string2...) |
Определяет, входит ли строковое значение в множество. |
Константы
Константа — это известное постоянное значение, которое может быть использовано в выражении. В 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". Если требуется, чтобы результатом выражения была строка, заключенная в кавычки, вложенная строка заключается либо в одинарные кавычки ('), либо в три пары двойных кавычек ("). Например, следующие выражения эквивалентны:
Forms![Contacts]![City]. DefaultValue = ' "Paris" '
Forms![Contacts]![City].DefaultValue = " " "Paris" " "
При использовании значений даты и времени заключайте значения в символы решетки (#). Например, #03.07.17#, #7-Мар-17# и #Мар-7-2017# — допустимые значения даты и времени. Когда приложение Access встречает допустимое значение даты и времени, заключенное в символы "#", значение автоматически обрабатывается как имеющее тип даты и времени.
Максимальное число уровней вложенности в веб-базах данных — 65
Выражения с более чем 65 уровнями вложенности не будут работать в браузере, поэтому их не следует использовать в веб-базах данных Access. Вы не увидите сообщение об ошибке — выражение просто не будет работать.
При использовании операторов &, AND и OR на сервере могут создаваться дополнительные уровни вложенности, которые не отражаются в клиенте Access. Например, выражение "a" & "b" & "c" не является вложенным в построителе выражений, но в SharePoint оно преобразуется к такому виду: concatenate.Db("a", concatenate.Db("b", "c") ). При этом создается один уровень вложенности. Использование большого числа последовательных операторов &, AND и OR в одном выражении может привести к превышению ограничения в 65 уровней вложенности, и выражение не будет работать в браузере.