Функции «Управления» используются для проверки условий и выполнения набора некоторых действий в зависимости от результатов проверки. Для их применения используют «Построитель» (рис. 4.19).
Рис. 4.19. Список функций управления
Принципы действий операторов изучим на примере таблицы «ВОЯЖ» (рис. 4.20). Допустим, требуется найти новую стоимость билетов, если их изменения произошли по следующему принципу: для поездок, приходящихся на период с мая по октябрь, стоимость билета следует увеличить на 25%; на остальные месяцы уменьшить на 10%.
Рис. 4.20. Таблица исходных данных
Для выполнения поставленной задачи используем функцию IIF (рис. 4.21).
Синтаксис: IIf(условие; действие по «ДА» ; действие по «Нет»)
Назначение: проверить условие и в зависимости от результатов его проверки, выполнить то ли действие по «ДА», то ли действие по «Нет».
Рис. 4.21. Построитель выражения при использовании функции управления
Новая стоимость: IIf(Month([ВОЯЖ]![Дата отъезда])>4 And Month([ВОЯЖ]![Дата отъезда])<11; [ВОЯЖ]![Стоимость билета]*1,25;[ВОЯЖ]![Стоимость билета]*0,9).
Комментарии к формуле мы привели ниже.
Новая стоимость: |
|
Название нового поля |
Month([ВОЯЖ]![Дата отъезда])>4 And Month([ВОЯЖ]![Дата отъезда])<11 |
|
Условие проверки номера месяца |
[ВОЯЖ]![Стоимость билета]*1,25 |
|
действие по «ДА» |
ВОЯЖ]![Стоимость билета]*0,9 |
|
действие по «НЕТ» |
Функция IIF может быть использована в укороченном варианте: IIf(условие; действие по «ДА»). Например, требуется повысить стоимость
проживания только во Франции. Новый запрос выполняется на базе уже имеющегося - это делается следующим образом:
Новая стоимость: IIf([ВОЯЖ]![Страна]= Франция";
[ВОЯЖ]![Стоимость проживания]*2).
Для того, чтобы можно было использовать поля базового запроса, его требуется предварительно сохранить.
Можно использовать вложенные функции IIF, которые проверяют несколько условий. Например:
ПОЖЕЛАНИЯ: IIf([ДНИ]<10;"Рано уезжаете!"; IIf([ДНИ]<20; "Приезжайте еще!";IIf([ДНИ]<30;"Может увидимся!";".....!!!!!")))
В запросе расписаны возможные варианты невысказанных мнений хозяев, в зависимости от срока проживания гостей.
Если количество проверок больше двух или трех, функцией IIF становится неудобно пользоваться и вместо нее применяют SWITCH.
Синтаксис: SWITCH(условие 1; действие 1 ; условие 2; действие 2; условие 3; действие 3…)
Назначение: содержит пары выражений и значений. Выражения вычисляются в том порядке, в котором они включены в список (слева направо). Возвращается значение, соответствующее первому истинному выражению в списке.
Пример: Страна = SWITCH([CityName] = "Лондон", "Англия", [CityName] = "Рим", "Италия", [CityName] = "Москва", "Россия") - если в поле [CityName] указан Лондон, то Вы находитесь в Англии...
В следующем примере функция SWITCH используется для определения сезона по известным датам. Напоминаем, что Month() используется для выделения месяца из даты. Обратите внимание на слово ИСТИНА в конце приводимого выражения. Оно используется в том случае, когда требуется выполнить какое-либо действие, если все предыдущие условия оказались невыполнимыми. Так, если анализируемый месяц находится вне рассматриваемых пределов, то этот сезон называется «ЗИМА». Слово ИСТИНА вводится без кавычек.
Сезон: SWITCH(Month([Экскурсия]![Дата])<6 And Month([Экскурсия]![Дата])>2; "весна";Month([Экскурсия]![Дата])<9 And Month([Экскурсия]![Дата])>5;"лето"; Month([Экскурсия]![Дата])<12 And Month([Экскурсия]![Дата])>8;"осень";Истина;"зима").
Попробуйте составить выражение, в котором цена стоимости билетов увеличивается на 35% в летний сезон, падает на 15% в осеннее – весенний и увеличивается на 5% в зимний.
Следующей функцией управления является функция CHOOSE.
Синтаксис: CHOOSE(указатель; действие 1 ; действие 2; действие 3…)
Назначение: возвращает действие из списка, выбранное на основании значения аргумента - указателя. Указатель всегда считается с 1. Если указатель равняется 1, возвращается первый элемент списка, если указатель равняется 2, возвращается второй элемент списка и т.п. Чаще всего применяют для замены числовых выражений текстовыми эквивалентами.
Пример: Допустим, что при вводе данных в таблицу «Экскурсия», мы не стали записывать название транспорта, а ввели кодировку. Если вводилась 1 , то это соответствовало морскому транспорту, 2 - поезду, 3 - автобусу. В запросе поле транспорт определяли как:
Транспорт(текст): Choose([Экскурсия]![Транспорт]; "море"; "поезд"; "автобус")