Вычисляемые поля
Как заставить Аксесс хранить результат вычислений?
Например, если у вас есть поля Количество и ЦенаЗаЕдиницу, как заставить Аксесс записать Количество * ЦенаЗаЕдиницу в поле Стоимость?
Лучший ответ: «Не делайте этого!»
Место вычисляемых полей ― в запросах, а не в таблицах.
Вычисляемые столбцы являются неотъемлемой частью электронных таблиц типа Excel и ему подобных, но им не место в таблице базы данных. Никогда не храните значение, которое зависит от других полей: это базовое правило нормализации. Нарушьте это правило ― и сразу появится забота, как поддерживать корректность вычисления во всех возможных ситуациях.
Спросите себя: «Если в этом поле окажется значение, отличное от вычисленного, будет ли это ошибкой?» Если ответ «Да», вам не стоит заводить это поле. Если разница будет нести определенный смысл, тогда вам это поле действительно нужно.
Итак, как же получить вычисленное поле, если его нельзя хранить в таблице? Используйте запрос:
Это создаст поле с именем Стоимость. Любая форма или отчет, основанные на этом запросе, воспримут это вычисленное поле как любое другое, так что вы легко сможете просуммировать результат. Это просто, эффективно и надежно.
Вы все еще хотите хранить вычисляемые поля?
Есть обстоятельства, когда хранение вычисленного результата имеет смысл ― типичный случай, когда нужна возможность иногда хранить отличное от вычисленного значение.
Скажем, плата за монтаж составляет дополнительные 10%, но чтобы выиграть тендер вы хотите отменить эту плату. Вычисляемое поле не сработает. В этом случае вполне разумно иметь запись с платой 0% вместо 10%, так что вам придется хранить это как поле в таблице.
Чтобы получить это, используйте событие AfterUpdate контрола на вашей форме, чтобы автоматически посчитать плату:
Теперь, каждый раз, когда меняется Количество или ЦенаЗаЕдиницу, Аксесс автоматически пересчитает новую плату, но пользователь может перезаписать вычисление и ввести другое число, если потребуется.
Если у вас возник вопрос, как бы помочь пользователю с вычислением с помощью описанного приема, см. Enter text in calculated controls.
А как насчет вычисляемых полей в Аксессе 2010?
Аксесс 2010 позволяет создать вычисляемое поле в таблице вот таким образом:
Просто выберите «Вычисляемый» из типов данных и ниже появится строка «Выражение». Впишите выражение. Аксесс будет пересчитывать его каждый раз, когда вы вводите запись.
Это может показаться простым решением, но оно создает больше проблем, чем решает. Вы быстро столкнетесь с тем, что выражения весьма ограничены. Также это сделает базу данных бесполезной для тех, кто будет использовать ее в Аксессе 2007. Вместо того, чтобы прочитать данные, они увидят вот такое сообщение:
Хуже того, результаты вычислений ненадежны. Если вы поменяете формулу выражения после того, как данные были внесены в таблицу, существующие результаты не будут правильно обновлены (хотя для новых записей редактирование обновит результаты). Так что на результаты вычислений полагаться нельзя. Сжатие/восстановление не производит пересчет, так что нет очевидного пути исправить неверные результаты.
Поскольку нельзя проиндексировать вычисляемые поля, вы не получите выигрыша в производительности, используя их. Вы нарушите фундаментальное правило нормализации, не получив ничего взамен. Мы рекомендуем использовать запросы для вычисляемых полей ― как и в предыдущих версиях.
Работа с вычисляемыми полями
Для вычисляемого поля можно определить заголовок, ограничение доступности, выражение представления, выражения упорядочивания, тип значения, доступные значения и оформление также как для полей наборов данных. Кроме того, вычисляемое поле может быть определено как ресурс, для этого необходимо добавить данное поле в список ресурсов и указать выражение, по которому будет вычисляться итог.
Пример
В приведенном запросе получаются данные из регистра продаж и регистра планов продаж. Результатом запроса будет таблица, где для каждого подразделения и каждой номенклатуры будет получено плановое и фактическое количество продаж.
Определим вычисляемое поле. Для этого перейдем в конструкторе схемы компоновки данных на вкладку Вычисляемые поля и добавим поле.
Результат отчета будет выглядеть так:
| Номенклатура | Подразделение | Стоимость план | Стоимость факт | Перевыполнение плана |
| Вентилятор настольный | Отдел оптовой продажи | 238,32 | 737,55 | 209,48 |
| Мужские сапоги с искусственным мехом | Отдел оптовой продажи | 234,24 | -100,00 | |
| Мишка (конфеты) | Отдел розничной продажи | 114,91 | Не запланировано |
Т.е. для каждой строчки было рассчитано значение вычисляемого поля.
Теперь в итог отчета будет выводиться сумма по полям, в том числе и по полю ПеревыполнениеПлана :
| Номенклатура | Подразделение | Стоимость план | Стоимость факт | Перевыполнение плана |
| Вентилятор настольный | Отдел оптовой продажи | 238,32 | 737,55 | 209,48 |
| Мужские сапоги с искусственным мехом | Отдел оптовой продажи | 234,24 | -100,00 | |
| Мишка (конфеты) | Отдел розничной продажи | 114,91 | Не запланировано | |
| Итого | 472,56 | 852,46 | 109,48 | |
Для того чтобы получить правильный итог по выполнению плана изменим формулу расчета итога по полю Выполнение плана :
В этой формуле уже получается не сумма отношений факта к плану, а отношения суммы факта к сумме плана. Кроме того, в итоге учитываются только те записи, для которых был установлен план.
Введем данную формулу в выражение ресурса:
Теперь результат отчета будет выглядеть так:
Вычисляемые поля в запросах.
Поле, содержимое которого является результатом расчета по содержимому других полей, называется Вычисляемым полем. Оно существует только в результирующей таблице.
1. Создать запрос выбора, выбрав необходимые поля.
2. В строку Поле пустого столбца бланка запроса введите выражение, начинающееся со знака = и состоящее из имен полей, заключенных в квадратные скобки, и какой либо арифметической операции.
3. Запустите запрос, нажав кнопку с изображением!.
4. В результирующей таблице появится новое поле с названием Выражение 1.
5. Вернувшись в режим Конструктора, измените имя Выражение 1на более значимое.
Запросы позволяют производить итоговые вычисления. Для этого предусмотрены следующие статистические функции:
Sum – суммирование значений определенного поля.
Avg – вычисление среднего значения данных определенного поля.
Min – вычисление минимального значения поля.
Max – вычисление максимального значения поля.
Count – вычисление количества записей, отобранных запросом.
First – определяется первое значение в указанном поле записей, отобранных запросом.
Last – определяется последнее значение в указанном поле записей, отобранных запросом.
StDev – вычисляется стандартное отклонение значений данного поля, для всех записей, отобранных запросом.
Var — вычисляется вариация значений данного поля, для всех записей, отобранных запросом.
Создать запрос выбора, выбрав необходимые поля.
1. Выполните команду Вид – Групповая операция. В результате чего в бланке запроса появится строка Групповая операция.
2. Для соответствующего поля выберите нужную функцию из списка Группировка.
3. Запустите запрос, нажав кнопку с изображением!.
4. При закрытии, сохраните запрос.
Выполненное задание отправить в системе moodle.ysaa.ru
II. Создание форм и отчетов (2 часа).
1. Откройте базу данных, созданную в результате выполнения предыдущего задания.
2. С помощью мастера форм создайте и сохраните форму на основе таблицы «Поставщики», выводящую в один столбец значения полей «Название фирмы», «Телефон», «Факс», «Адрес».
3. Создайте форму для таблиц «Товары» и «Поставщики», отображающую данные о товарах, поставляемых каждой из фирм, используя таблицу «Поставщики» в качестве главной, а таблицу «Товары» в качестве подчиненной.
4. Создайте форму для таблицы «Товары1», отображающую данные о ценах на телевизоры, их марку и изображение, включив в область примечаний минимальную цену. Добавьте в форму кнопку, при нажатии на которую будет выполняться запрос на обновление данных, созданный на предыдущих занятиях. ( Для обновления данных в форме после нажатия на созданную кнопку используйте команду Записи- Обновить).
5. Создайте отчет по запросу для таблиц «Товары» и «Поставщики», отображающий данные о музыкальных центрах: их марку и цену, а также название фирмы-поставщика, включив в область заголовка соответствующее название отчета, в область верхнего колонтитула системную дату, а в область примечаний – среднюю цену (Для записи формулы вычисления средней цены воспользуйтесь Построителем выражений). Оформите отчет с помощью элементов рисования панели элементов. В случае необходимости воспользуйтесь информацией Помощника по разработке отчета.
Для создания отчета без помощи Мастера.
Статьи к прочтению:
Как создать ВЫЧИСЛЯЕМЫЕ запросы в базе Access
Похожие статьи:
При построении запросов можно создавать вычисляемые поля, значения которых будут результатом выполнения операций над другими полями таблицы. Для этого…
Одна из самых мощных возможностей Access одновременно является и наиболее важной. Отношения позволяют связать таблицы графически. Можно даже связывать…
Создание выражений
С помощью выражений можно выполнять разнообразные операции с данными. Например, вы можете определить, сколько дней прошло с момента отправки заказа, или объединить содержимое полей FirstName и LastName и поместить результат в поле FullName. Разделы этой статьи содержат пошаговые инструкции по созданию выражений.
Вычисление значений элементов управления в формах и отчетах
При использовании выражения в качестве источника данных элемента управления создается вычисляемый элемент управления. Предположим, например, что имеется отчет, в котором отображаются товары на складе, и необходимо создать в нижнем колонтитуле итог для суммирования данных по всем строкам отчета.
Чтобы вычислить итог, поместите элемент управления «поле» в нижний колонтитул отчета и настройте для свойства ControlSource этого поля следующее выражение:
В области навигации щелкните правой кнопкой мыши форму, которую необходимо изменить, и выберите в контекстном меню пункт Режим макета или Конструктор.
Выделите элемент управления, в который необходимо ввести выражение.
Если окно свойств не отображается, нажмите клавишу F4.
Чтобы создать выражение с помощью построителя выражений, нажмите кнопку Построить 
После ввода выражения окно свойств будет выглядеть так:
Использование выражений в условиях запросов
Вы можете использовать условия, чтобы ограничить результаты запроса. Введите условия в виде выражения, и приложение Access вернет только соответствующие ему строки.
Предположим, вы хотите просмотреть все заказы с датой отгрузки в течение первых трех месяцев 2017 г. Чтобы задать условие, введите следующее выражение в ячейку Условия столбца «Дата и время» в запросе. В нашем примере используется столбец «Дата и время» с именем ShippedDate. Чтобы определить диапазон дат, введите следующее условие:
Столбец ДатаИсполнения будет выглядеть подобным образом:
Для каждой записи в таблице заказов, для которой значение в столбце ShippedDate попадает в указанный интервал дат, будет создана запись в выходных данных запроса. Обратите внимание: в выражении даты заключаются в знаки решетки ( # ). Значение между знаками решетки трактуется в Access как значение с типом данных «Дата и время». Это означает, что с такими значениями могут производиться соответствующие вычисления, например вычитание одной даты из другой.
В области навигации щелкните правой кнопкой мыши запрос, который необходимо изменить, и выберите в контекстном меню пункт Конструктор.
Выберите ячейку Условия в столбце, для которого необходимо создать условие отбора.
Чтобы использовать построитель выражений, на вкладке Конструктор в группе Настройка запроса нажмите кнопку Построитель 
Если для редактирования выражения вам требуется больше места, установите курсор в ячейку Условие отбора, а затем нажмите сочетание клавиш SHIFT+F2, чтобы открыть окно Область ввода:
Совет Чтобы сделать текст более удобным для чтения, выберите Шрифт.
Создание вычисляемого поля в запросе
Предположим, вы создаете запрос и хотите показать результаты расчета, в котором используются другие поля запроса. Чтобы создать вычисляемое поле, нужно ввести выражение в пустую ячейку в строке Поле запроса. Допустим, в вашем запросе есть поля Количество и Цена. Их значения требуется перемножить, чтобы получить вычисляемое поле Сумма. Для этого в строке Поле запроса введите следующее выражение:
При выполнении запроса в Access выполняется расчет каждой строки, как показано ниже:
В области навигации щелкните правой кнопкой мыши запрос, который необходимо изменить, и выберите в контекстном меню пункт Конструктор.
Выберите ячейку Поле в столбце, в котором необходимо создать вычисляемое поле.
Чтобы создать выражение вручную, просто введите его.
Чтобы использовать построитель выражений, на вкладке Конструктор в группе Настройка запроса нажмите кнопку Построитель.
Создание вычисляемого поля в таблице
В Access можно создать вычисляемое поле в таблице. Благодаря этому для выполнения расчетов не придется создавать отдельный запрос. Например, если у вас есть таблица, в которой перечислены количество, цена и налоговая ставка для каждой позиции заказа, вы можете добавить вычисляемое поле общей стоимости:
В вычислении нельзя использовать поля из других таблиц или запросов, а результаты вычислений доступны только для чтения.
Откройте таблицу, дважды щелкнув ее в области навигации.
Прокрутите таблицу по горизонтали до крайнего правого столбца и нажмите в заголовке столбца кнопку Щелкните, чтобы добавить.
В появившемся списке выберите пункт Вычисляемое поле и укажите тип данных результата. В Access откроется построитель выражений.
Введите формулу вычисления, которую вы хотите использовать для этого поля, например:
Выражения в вычисляемых полях не начинаются со знака равенства (=).
Приложение Access добавит вычисляемое поле и выделит его заголовок, чтобы можно было ввести имя поля.
Введите имя вычисляемого поля и нажмите клавишу ВВОД.
Задание значений по умолчанию для поля таблицы
С помощью выражения можно задать для поля таблицы значение по умолчанию, которое Access будет использовать для новых записей, если не предоставлено другое значение. Допустим, вы хотите автоматически вставлять дату и время в поле «Дата_заказа» при добавлении новой записи. Для этого можно использовать следующее выражение:
В области навигации дважды щелкните таблицу, которую нужно изменить.
Таблица откроется в режиме таблицы.
Выберите поле, которое требуется изменить.
На вкладке Поля в группе Свойства нажмите кнопку Значение по умолчанию. В Access откроется построитель выражений.
Введите выражение, начинающееся со знака равенства ( =).
Примечание. При связывании элемента управления с полем таблицы действует следующее правило: если для элемента управления и для поля заданы значения по умолчанию, значение по умолчанию элемента управления имеет приоритет.
Задание значений по умолчанию для элементов управления
Другим объектом, где часто применяются выражения, является свойство Значение по умолчанию элемента управления. Свойство Значение по умолчанию элемента управления аналогично свойству Значение по умолчанию поля в таблице. Например, чтобы использовать текущую дату в качестве значения по умолчанию для текстового поля, вы можете указать следующее выражение:
В этом выражении используется функция Date, которая возвращает текущую дату, но не время. Если текстовое поле привязано к полю таблицы, которое имеет значение по умолчанию, то значение по умолчанию элемента управления будет иметь приоритет перед значением по умолчанию поля таблицы. Часто имеет смысл настроить свойство Значение по умолчанию для поля таблицы. Если в этом случае к одному и полю таблицы привязано несколько элементов управления в разных формах, каждый из них будет иметь одно значение по умолчанию, и ввод данных во всех формах будет согласованным.
В области навигации щелкните правой кнопкой мыши форму или отчет, которые необходимо изменить, и выберите в контекстном меню пункт Конструктор или Режим макета.
Выделите элемент управления, который необходимо изменить.
Если окно свойств не отображается, нажмите клавишу F4.
На вкладке Все окна свойств перейдите к ячейке свойства Значение по умолчанию.
Введите выражение или нажмите кнопку Построить 
Добавление правила проверки в поле таблицы или запись
Выражения весьма полезны при проверке данных, которые вводятся в базу данных: они позволяют отсеять неподходящие сведения. В таблицах можно создавать правила проверки двух типов: для полей, которые не позволяют вводить в поля недопустимые данные, и для записей, которые не позволяют создавать записи, нарушающие правило. В обоих случаях используются выражения.
Предположим, что в таблице Inventory имеется поле Units On Hand и требуется задать условие, разрешающее пользователям вводить только неотрицательные значения. Иначе говоря, количество товара никогда не может быть отрицательным. Это можно сделать, указав для поля Units On Hand следующее правило проверки:
ПРОЦЕДУРА: ввод правила проверки для поля или записи
В области навигации дважды щелкните нужную таблицу. Таблица откроется в режиме таблицы.
При вводе условия на значение поля выделите поле, которое необходимо изменить.
На вкладке Поля в группе Проверка поля нажмите кнопку Проверка и выберите пункт Правило проверки поля или Правило проверки. В Access откроется построитель выражений.
Начните вводить необходимые условия. Например, для условия на значение поля, требующего ввода неотрицательных значений, введите следующее выражение:
Не начинайте выражение со знака равенства (=).
ПРОЦЕДУРА: ввод сообщения проверки правильности
Чтобы сделать базу данных более удобной в использовании, можно задать собственные сообщения проверки правильности. Эти сообщения будут использоваться вместо стандартных сообщений, выводимых приложением Access, когда данные не соответствуют условию. В сообщение можно включить сведения, помогающие пользователю ввести правильные данные, например «Значение в поле Units On Hand не может быть отрицательным».
В области навигации дважды щелкните таблицу, которую нужно изменить.
Таблица откроется в режиме таблицы.
При создании сообщения для условия на значение поля выделите соответствующее поле.
На вкладке Поля в группе Проверка полей нажмите кнопку Проверка и выберите пункт Сообщение проверки поля или Сообщение проверки записи.
В диалоговом окне Введите сообщение о проверке введите сообщение, которое будет выводиться, если данные не соответствуют условию на значение, и нажмите кнопку ОК.
Добавление правила проверки в элемент управления
Как и у полей таблицы и записей, у элементов управления есть свойство ValidationRule (Правило проверки), для которого можно создать выражение. Предположим, что используется форма ввода интервала дат для отчета и требуется, чтобы начальная дата была не раньше, чем 01.01.2017. В этом случае можно задать свойства ValidationRule и ValidationText (Сообщение об ошибке) для поля, в которое вводится начальная дата:
Условие на значение
Сообщение об ошибке
Невозможно ввести дату ранее 01.01.2017.
При попытке ввести дату раньше 01.01.2017 будет выведено сообщение с текстом, указанным в свойстве ValidationText. Если поле свойства ValidationText пусто, будет выведено стандартное сообщение. После нажатия кнопки ОК фокус ввода вернется в текстовое поле.
Если условие на значение задается для поля таблицы, оно будет действовать при любом изменении значения этого поля в базе данных. Напротив, если условие на значение задается для элемента управления в форме, оно будет действовать только при использовании этой формы. Чтобы задать разные условия на значение для разных пользователей, иногда имеет смысл создать эти условия отдельно для полей таблицы и элементов управления в форме.
В области навигации щелкните правой кнопкой мыши форму или отчет, которые необходимо изменить, и выберите в контекстном меню пункт Конструктор или Режим макета.
Щелкните правой кнопкой мыши элемент управления, который требуется изменить, и выберите в контекстном меню пункт Свойства. Будет отображено окно свойств элемента управления.
На вкладке Все выберите ячейку свойства Validation Rule (Правило проверки).
Введите выражение или нажмите кнопку Построить 
Не начинайте выражение с оператора =.
Чтобы настроить сообщение, которое появится при вводе значения, не соответствующего условию, укажите нужный текст в ячейке свойства Сообщение об ошибке.
Группировка и сортировка данных в отчетах
В области Группировка, сортировка и итоги можно определить уровни группировки и порядок сортировки для данных в отчете. Как правило, группировка и сортировка выполняются по полю, выбранному в списке, но если требуется выполнить группировку или сортировку по вычисляемому значению, можно указать выражение.
Группировка — это процедура суммирования столбцов с одинаковыми значениями. Например, пусть в базе данных хранятся сведения о продажах для офисов в разных городах, а один из отчетов этой базы данных называется «Продажи по городам». Запрос, который обеспечивает данные для этого отчета, группирует их по названию города. Такого рода группировка облегчает восприятие и понимание информации.
Напротив, сортировка представляет собой процесс наложения порядка сортировка на строки (записи) в результатах запроса. Например, можно отсортировать записи по значению первичного ключа (или по другому набору значений в другом поле) по возрастанию или по убыванию либо отсортировать записи по одному или нескольким символам в указанном порядке, например по алфавиту.
ПРОЦЕДУРА: добавление группировки и сортировки в отчет
В области навигации щелкните правой кнопкой мыши отчет, который необходимо изменить, и выберите в контекстном меню пункт Режим макета или Конструктор.
На вкладке Конструктор в группе Группировка и итоги нажмите кнопку Группировка и сортировка. Ниже отчета появится область Группировка, сортировка и итоги.
Чтобы добавить к отчету уровень группировки, нажмите Добавить группировку.
Чтобы добавить к отчету порядок сортировки, нажмите Добавить сортировку.
В области появится новый уровень группировки или порядок сортировки, а также список полей с данными для этого отчета. На приведенном ниже рисунке показан типичный новый уровень группировки (по полю «Категория») и порядок сортировки (по полю «Производитель»), а также список доступных полей для группировки и сортировки.
Ниже списка доступных полей нажмите выражение, чтобы открыть построитель выражений.
Введите нужное выражение в поле выражения (верхнее поле) построителя выражений. Обязательно начните выражение с оператора равенства ( = ).
ПРОЦЕДУРА: добавление выражения в существующую группировку или сортировку
В области навигации щелкните правой кнопкой мыши отчет, который необходимо изменить, и выберите в контекстном меню пункт Режим макета или Конструктор.
Выберите уровень группировки или порядок сортировки, который требуется изменить.
Щелкните стрелку вниз рядом с пунктом Группировка (уровни группировки) или Сортировка (порядок сортировки). Появится список доступных полей
В нижней части этого списка нажмите выражение, чтобы открыть построитель выражений.
Введите выражение в поле выражения (верхнем поле) построителя выражений. Убедитесь, что выражение начинается с оператора равенства ( =).
Управление запуском макрокоманд
В некоторых случаях выполнять макрокоманду или набор макрокоманд в макросе нужно только в том случае, если выполнено определенное условие. Предположим, необходимо, чтобы макрокоманда выполнялась только в том случае, если значение в поле не меньше 10. Для этого в блоке Если макроса можно задать соответствующее условие с помощью выражения.
Например, допустим, что текстовое поле называется «Позиции». Выражение для условия будет выглядеть следующим образом:
В области навигации щелкните правой кнопкой мыши макрос, который необходимо изменить, и выберите в контекстном меню пункт Конструктор.
Перейдите к блоку Если, который требуется изменить, или добавьте блок Если из области «Каталог макрокоманд».
Щелкните верхнюю строку блока Если.
Введите условное выражение в поле или нажмите кнопку Построить 
















