Access

Запросы с вычисляемыми полями в access: Запросы с вычисляемыми полями — Информатика, информационные технологии

Как сделать запрос с вычисляемым полем в access?

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

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

Задача 1. В таблице ТОВАР имеются поля ЦЕНА и СТАВКА_НДС, вычислите цену с учетом НДС и сравните ее с полученной в вычисляемом поле таблицы Цена с НДС.

  1. Создайте в режиме конструктора запрос на выборку для таблицы ТОВАР.
    Перетащите в бланк запроса поля НАИМ_ТОВ, ЦЕНА, СТАВКА_НДС и Цена с НДС (рис. 4.6).
  2. Для подсчета цены с учетом НДС создайте вычисляемое поле, записав в пустой ячейке строки Поле (Field) выражение +*.
  3. Для отбора записей со значением выше 5000 в вычисляемом поле в строку Условие отбора (Criteria) введите > 5000
  4. После ввода выражения система по умолчанию формирует имя вычисляемого поля Выражение 1, которое становится заголовком столбца в таблице с результатами выполнения запроса. Это имя вставится перед выражением +*. Для каждого нового вычисляемого поля в запросе номер выражения увеличивается на единицу. Имя вычисляемого поля отделяется от выражения двоеточием. Для изменения имени установите курсор мыши в вычисляемом поле бланка запроса и нажмите правую кнопку мыши. В контекстно-зависимом меню выберите Свойства (Properties) поля и в строку Подпись (Caption) введите новое имя поля ― Цена с НДС1. Теперь в таблице с результатами выполнения запроса в заголовке вычисляемого столбца отобразится это имя.
    Имя поля может быть исправлено также непосредственно в бланке запроса.
  5. Для отображения результата выполнения запроса щелкните на кнопке Выполнить (Run) в группе Результаты (Results). Вычисляемое поле таблицы и за-проса имеют одинаковые значения.
  6. Измените в одной из записей запроса цену товара. Значения в обоих вычисляемых полях будут моментально пересчитаны.
  7. Для формирования сложного выражения в вычисляемом поле или условии отбора целесообразно использовать построитель выражений. Построитель позволяет выбрать необходимые в выражении имена полей из таблиц, запросов, знаки операций, функции. Удалите выражение в вычисляемом поле и используйте построитель для его формирования.
  8. Вызовите построитель выражений (Expression Builder), нажав кнопку
    Построитель
    (Builder) в группе Настройка запроса (Query Setup) ленты Конструктор (Design), или выбрав Построить (Build) в контекстно-зависимом меню. Курсор мыши должен быть установлен предварительно в ячейке ввода выражения.
  9. В левой части окна Построитель выражений (Expression Builder) (рис. 4.7) выберите таблицу ТОВАР, на которой построен запрос. Справа отобразится список ее полей. Последовательно выбирайте нужные поля и операторы, двойным щелчком вставляя в выражение. Выражение сформируется в верхней части окна. Обратите внимание, построитель перед именем поля указал имя таблицы, которой оно принадлежит, и отделил его от имени поля восклицательным знаком.
  10. Завершите процесс построения выражения в вычисляемом поле, щелкнув на кнопке ОК.
  11. Сохраните запрос под именем ― Цена с НДС и закройте его.
  12. Выполните сохраненный запрос, выделив его в области навигации и выбрав в контекстном меню команду Открыть (Open).

Задача 2. В вычисляемых полях и условиях отбора можно использовать встроенные функции. В Access определено более 150 функций.
Пусть необходимо выбрать все накладные, по которым производилась отгрузка в заданном месяце. В таблице НАКЛАДНАЯ дата отгрузки хранится в поле ДАТА_ОТГ с типом данных Дата/время (Date/Time).

  1. Создайте в режиме конструктора запрос на выборку для таблицы НАКЛАДНАЯ. Перетащите в бланк запроса поля НОМ_НАКЛ и КОД_СК (рис. 4.8).
  2. Создайте вычисляемое поле в пустой ячейке строки Поле (Field), записав туда одно из выражений: Format(!;»mmmm») ― эта функция возвратит пол-ное название месяца
    или Format(!;»mm») ― эта функция возвратит номер месяца.
  3. Для отбора накладных, выписанных в заданном месяце, в вычисляемом поле в строку Условие отбора (Criteria) введите название месяца, например март (рис. 4.8), или номер месяца, например 3 в соответствии с параметром в функции Format.
  4. Выполните запрос, нажав кнопку Выполнить (Run) в группе Результаты (Results) на вкладке ленты Работа с запросами | Конструктор (Query Tools | Design).
  5. Запишите в вычисляемом поле функцию Month(НАКЛАДНАЯ!ДАТА_ОТГ), и убедитесь, что эта функция возвращает выделенный из даты номер месяца.
  6. Для выборки всех строк, относящихся ко второму кварталу, в строку Условие отбора (Criteria) введите оператор Between 4 And 6, определяющий, попадает ли значение выражения в указанный интервал.
  7. Запишите в вычисляемом поле выражение MonthName(Month(НАКЛАДНАЯ!ДАТА_ОТГ)) и убедитесь, что функция MonthName преобразует номер месяца в его полное на-звание.

Для закрепления смотрим видеоурок:

Параметрический запрос Access тут.

Создание запросов интересно не только тем, что вы можете в виде одной таблицы представить данные из нескольких связанных таблиц и отобрать нужные записи из этих таблиц. Вы можете создавать столбцы в запросе, которые являются результатом вычислений над значениями других столбцов. Такие столбцы называются вычисляемыми. Это существенно расширяет возможности запросов. Простейшим примером вычисляемого поля в запросе может быть поле, которое объединяет имя и фамилию человека. На рис. 4.18 показан пример такого поля в запросе, созданном на базе таблиц «Сотрудники» (Employees) и «Заказы» (Orders).

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

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

Рис. 4.18. Вычисляемое поле в запросе

Совет

Если выражение длинное, его неудобно писать в строке Поле (Field). Нажмите комбинацию клавиш +. Появится диалоговое окно Область ввода (Zoom) (рис. 4.19), в котором вводить выражение удобнее. Можно также использовать Построитель выражений, вызвав его щелчком по кнопке Построить (Build) на панели инструментов. (Подробнее об использовании Построителя выражений и о правилах составления выражений в Access см.

последний раздел данной главы.)

Рис. 4.19. Диалоговое окно Область ввода

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

Все специалисты Access хранят в своих БД несколько (или несколько десятков) полезных запросов, упрощающих решение повседневных задач. В предыдущей главе вы узнали, как создавать запросы, обрабатывающие огромные объемы информации и предлагающие вам именно то, что вы хотите увидеть. Но знатоки программы Access знают, что гораздо больше мощи прячется за пределами окна конструктора запросов.

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

Эти методы — неотъемлемая часть набора рабочих средств любого настоящего фанатика запросов.

Вычисляемые поля

Когда вы начинали проектировать таблицы, то узнали, что в мире БД считается преступлением включение информации, основанной на данных другого поля или другой таблицы. Примером такой ошибки может служить таблица Products, в которой есть и поле Price (цена), и поле PriceWithTax (цена с включенным налогом). Проблема в том, что поле PriceWithTax вычисляется на основании поля Price. Хранение обоих полей — это избыточное расходование дискового пространства. Еще хуже, если налоговая ставка изменится, тогда вы останетесь с множеством записей, нуждающихся в обновлении, и возможностью появления противоречивых данных (например, когда цена с налогом окажется ниже цены без налога).

Даже зная, что не следует создавать поля, такие как PriceWithTax, иногда вы вынуждены отображать в программе Access вычисляемые данные. Прежде чем компания Boutique Fudge напечатает список для одного из своих наименее любимых розничных продавцов, она хочет установить для цены надбавку 10%. Для этого компании необходимо откорректировать информацию о цене до вывода данных на печать. Если продавец увидит более низкую цену без надбавки, компания будет вынуждена запросить ее.

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

Определение вычисляемого поля

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

ИмяВычисляемогоПоля:   Выражение

Например, поле цены с налогом, PriceWithTax, определяется следующим образом:

PriceWithTax:       *   1. 10

По сути, это выражение сообщает программе Access о том, что нужно взять поле Price и умножить его на 1.10 (что эквивалентно повышению цены на 10%). Access повторяет это вычисление для каждой записи, входящей в результаты запроса. Для того чтобы это вычисление выполнялось, в таблице должно существовать поле Price. Но вовсе необязательно отображать отдельно это поле в окне результатов запроса.

Можно сослаться на поле Price, используя его полное имя, состоящее из имени таблицы с последующей точкой, за которой указано имя поля:

PriceWithTax:    .   *   1.10

Такая синтаксическая запись нужна, если в ваш запрос включено несколько таблиц (например, использование запроса с операцией объединения (query join), описанного в разд. «Запросы и связанные таблицы» главы 6), и одно и то же поле есть в обеих таблицах. В этой ситуации следует применять полное имя для того, чтобы избежать неоднозначности. (Если не сделать этого, Access выдаст сообщение об ошибке при попытке выполнить запрос. )

Примечание

Пользователи предыдущих версий программы Access иногда вместо точки используют восклицательный знак (например, ! ), что равнозначно.

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

Теперь вы готовы к выполнению запроса. Когда вы выполните его, вычисляемые данные появятся рядом с другими столбцами (рис. 7.2). Если вы не довольны тем, что вычисляемые данные несколько иначе отформатированы — больше знаков в дробной части и нет символа валюты — это можно исправить с помощью округления (см. разд. «Применение функций » далее в этой главе) и форматирования (см.разд. «Форматирование чисел «далее в этой главе).

У вычисляемых полей есть одно ограничение — поскольку информация не сохраняется в вашей таблице, вы не можете их редактировать. Если нужно изменить цену, необходимо отредактировать базовое поле Price — попытка корректировать поле PriceWithTax привела бы программу Access в полное замешательство.

Примечание

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

Рис. 7.1. Этот запрос отображает два поля непосредственно из БД (ID и Name)

и вставляет вычисляемое поле PriceWithTax. Обычное поле Price, которое программа Access

применяет для вычисления поля PriceWithTax, вообще не отображается

Рис. 7.2. Результаты запроса отображают поле PriceWithTax с надбавкой 10%. Главное состоит в том, что вычисляемая информация теперь доступна постоянно, несмотря на то, что она не хранится в БД. Попробуйте проверить это с помощью карманного калькулятора

На профессиональном уровне. Синхронизация запросов

Можно опробовать интересный прием. Выполните запрос ProductsWithTax и оставьте его открытым, отображающим свои результаты. Теперь откройте таблицу Products, содержащую реальные данные, и измените цену любого продукта. Вернитесь снова в запрос Products WithTax. Изменилось значение в этом запросе?

Если вы не знаете, что произойдет, не бойтесь — PriceWithTax автоматически обновляется для отображения новой цены. Программа Access автоматически синхронизирует представления запросов с реальными данными в вашей таблице. Access отслеживает изменение записи и немедленно обновляет окно результатов запроса.

Есть лишь несколько исключений из этого правила.

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

•    Если вы изменили запись так, что она больше не должна попадать в результаты запроса, она не удаляется автоматически из окна результатов. Если в вашем запросе отображаются все продукты, стоящие больше 100 долларов, и вы уменьшили цену одного из них до 50 долларов, этот продукт останется в результирующем перечне вашего запроса (с новой ценой) до тех пор, пока вы не обновите результаты.

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

•    Если несколько пользователей на разных компьютерах редактируют БД (как описано в главе 18), вы не увидите немедленно изменения, внесенные другими пользователями.

Для получения самых свежих результатов можно обновить отдельные записи или весь запрос целиком. Для обновления одной записи выберите Главная > Записи > Обновить > Обновить запись (Home > Records > Refresh > Refresh Record). Для повторного выполнения запроса и полного обновления выберите Главная > Записи > Обновить > Обновить все (Home > Records > Refresh > Refresh All). Это действие также выводит на экран любые новые записи и скрывает те записи, которые после внесения изменений больше не удовлетворяют вашим условиям отбора.

Прежде чем двигаться дальше, есть смысл рассмотреть правила создания и использования вычисляемых полей. Далее приведено несколько рекомендаций.

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

¦  Формируйте выражения из полей, чисел и математических операций. Наиболее распространенные вычисляемые поля содержат одно или несколько существующих полей или числовые константы и соединяет их друг с другом с помощью хорошо знакомых знаков математических операций, таких как сложение (+), вычитание (-), умножение (*) или деление (/).

¦  Не удивляйтесь присутствию квадратных скобок. Выражение PriceWithTax:    *   1.10 эквивалентно выражению PriceWithTax:   Price   *   1. 10 (единственное отличие — квадратные скобки вокруг имени поля Price). Технически скобки нужны только,

¦   

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

Малоизвестная или недооцененная возможность. Переименование поля в запросе

Устали от длинных имен полей в окне результатов ваших запросов?  Используя толькочто полученные знания, касающиеся выражений, можно безболезненно переименовать поле в окне результатов вашего запроса. Все что вам требуется — это вычисляемое поле. Хитрость заключается в создании (с помощью выражения) вычисляемого поля, совпадающего с одним из существующих полей и присвоении ему нового имени. Технически в этом поле не выполняются никакие вычисления, но оно все равно корректно действует. Далее приведен пример вычисляемого поля, которое переименовывает DateCustomerPlacedPurchaseOrder в Date: Date:   DateCustomerPlacedPurchaseOrder Новое имя (в данном примере Date) называют псевдонимом (alias).

Используя этот прием, помните о том, что исходное иоле (в данном случае DateCustomerPlacedPurchaseOrder) не надо включать в ваш запрос. Нужная вам информация отображается в вычисляемом поле (Date).

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

В разделе Программное обеспечение на вопрос в microsoft access 2007 как сделать вычисляемое поле заданный автором Mary Cinovskaya лучший ответ это 1. Откройте таблицу, дважды щелкнув ее в области навигации.
2. Прокрутите таблицу по горизонтали до крайнего правого столбца и щелкните заголовок столбца Щелкните для добавления.
3. В появившемся списке выберите пункт Вычисляемое поле и укажите тип данных результата.
4. Откроется построитель выражений Access.
5. Начните вводить формулу расчета, которая требуется для этого поля, например:
*
ПРИМЕЧАНИЕ В начале выражения не требуется вводить знак равенства (=).
6. Нажмите кнопку ОК.
7. Приложение Access добавит вычисляемое поле и выделит его заголовок, чтобы можно было ввести имя поля.
Введите имя вычисляемого поля и нажмите клавишу ВВОД.dim565

Искусственный Интеллект
(411605)
Извините

2,12. Вычисляемые поля в запросе. Запрос с параметрами.

Вычисляемые поля в запросе.

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

Чтобы создать вычисляемое поле, необходимо:

Установить маркер в пустую ячейку первой строки бланка запроса.

Вместо имени поля ввести текст, который будет выводиться в этом поле во время выполнения запроса

Затем ввести выражение, причем имена полей заключаются в [ ].

Создание запроса с параметрами

Microsoft Access позволяет задавать параметры в качестве усло­вия в строке Условие отбора. Эти условия должны быть заключены в квадратные скобки []. При выполнении Microsoft Access отображает на экране этот параметр и ожидает ввода с экрана- По умолчанию введенные в запрос параметры преобразуются в текстовый тип данных. Для того, чтобы задать целый, логический или любой другой тип параметра используется набор команд Запрос/Параметры.

Текст параметра должен отличаться от имени полей, хотя может содержать имена полей. Запросы с несколькими параметрами вводятся как сложное условие.

Чтобы создать и итоговый запрос, необходимо:

• Создать обычный запрос, находясь в конструкторе запросов.

• Выбрать Вид/Групповые операции, либо нажать кнопку Групповые операции на панели инструментов. В бланке запроса появится новая строка с наименованием Групповая операция. В этой стро­ке вы должны указать тип выполняемого вычисления.

Для удаления строки Групповая операция необходимо нажать еще

раз кнопку Групповая операция

Операции, допустимые в строке Групповая операция:

• Sum — сложение

• Avg — среднее значение

• Min — минимальное значение

• Мах — максимальное значение

• Count — количество записей, содержащих не пустые значения

• StDev — стандартное отклонение

• Var — дисперсия

• First — значение в первой записи

• Last — значение в последней записи

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

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

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

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

2,16. Модифицирующие запросы: запросы создания таблиц, запросы удаления, запросы добавления, запросы замены.

Модифицирующие запросы

MS Access позволяет использовать запросы в -качестве инстру­мента для изменения содержимого таблиц. Этот инструмент позволя­ет одновременно обрабатывать большое количество записей и защи­щает от ошибок при обработке данных.

Типы модифицирующих запросов:

Запросы создания таблиц

Запросы удаления

Запросы добавления

Запросы замены

Изменения, происходящие в результате выполнения запросов этих типов, производятся в таблицах базы данных и являются необратимыми.

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

Чтобы создать один из типов модифицирующего запроса, не­обходимо:

1. Создать запрос на базе таблицы (таблиц)

2. Выбрать поля, которые необходимо модифицировать

3. Установить тип создаваемого запроса с помощью команд раз­дела меню Запрос.

Необходимо помнить, что при использовании запросов на удале­ние можно получить непредсказуемый результат, если:

• Таблица является частью отношения один -ко- многим

• В качестве условия обеспечения целостности данных исполь­зована опция Каскадное удаление связанных записей.

При использовании запроса добавления:

• Результирующая таблица может быть расположена в той же самой или другой базе данных.

• Записи в нее могут добавляться по условию.

• Если количество записей в исходной и результирующей таб­лицах различно, то MS Access определяет поля с одинаковыми именами и добавляет в них данные, а остальные игнорирует.

• Если имена полей в результирующей таблице отличаются от имен в исходной таблице, их необходимо указать в строке До­бавление.

Запросы обновления позволяют изменить значение выбранного поля по всем записям таблицы, удовлетворяющим определенным условиям.

Сохранение запросов

Для cохранения запроса выполните команду Файл/Сохранить как. Если будет совершена попытка закрыть не сохраненный запрос MS Access сам предложит вам это сделать.

Задайте имя запроса н нажмите кнопку ОК. Имя запроса не должно повторять имя таблицы.

При выполнении команды Открыть в окне базы данных MS Aссess запустит на выполнение запрос.

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

советов Microsoft Access: вычисляемые поля

советы Microsoft Access: вычисляемые поля

Советы Microsoft Access для обычных пользователей

Предоставлено Алленом Брауном, ноябрь 2003 г. Обновлено в апреле 2010 г.


Как получить доступ для хранения результатов вычислений?

Например, если у вас есть поля с именами Quantity и UnitPrice , как получить доступ для записи Quantity * UnitPrice в другое поле с именем Сумма ?

Лучший ответ: «Не надо!»

Вычисляемые поля принадлежат запросам, а не таблицам.

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

Спросите себя, «Было бы неправильно, если бы мое поле содержало значение, отличное от расчетного?» Если вы ответите Да, вы не должны сохранять это поле. Если разница будет значимой, вам нужно поле.

Итак, как получить вычисляемое поле, если вы не храните его в таблице? Используйте запрос:

  1. Создайте запрос на основе вашей таблицы.
  2. Введите выражение в строку «Поле» сетки дизайна запроса:
        Сумма: [Количество] * [Цена за единицу]

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

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

Вы все равно хотите сохранить рассчитанный результат?

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

Допустим, вы взимаете комиссию за строительство, которая обычно составляет дополнительные 10%, но, чтобы выиграть некоторые котировки, вы можете отказаться от комиссии. Вычисляемое поле не будет работать. В этом случае имеет смысл иметь запись, в которой комиссия составляет 0 долларов США вместо 10%, поэтому вы должны сохранить ее как поле в таблице.

Для этого используйте событие After Update элементов управления в форме для автоматического расчета комиссии:

  1. Установите для свойства After Update текстового поля Quantity значение [Процедура события].
  2. Нажмите кнопку «Создать» (. ..) рядом с этим. Access открывает окно кода.
  3. Введите эту строку между строками Private Sub… и End Sub :
     Private Sub Quantity_AfterUpdate()
        Me.Fee = Round(Me.Quantity * Me.UnitPrice * 0,1, 2)
    Конец суб 
  4. Установите для свойства After Update текстового поля UnitPrice значение [Процедура события] и нажмите кнопку Build.
  5. Введите эту строку:
     Частный Sub UnitPrice_AfterUpdate()
        Call Quantity_AfterUpdate
    Конечный переходник 

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

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

Как насчет вычисляемых полей в Access 2010?

Access 2010 позволяет поместить вычисляемое поле в таблицу, например:

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

Это может показаться простым, но создает больше проблем, чем решает. Вы быстро обнаружите, что выражения ограничены. Вы также обнаружите, что это делает вашу базу данных бесполезной для всех, кому нужно использовать ее в Access 2007. Вместо чтения данных они получат сообщение вроде этого:

Что еще более серьезно, результаты расчетов ненадежны. Если вы измените выражение после того, как данные были введены в таблицу, существующие результаты могут быть обновлены неправильно (через новые записи обновляются изменения), поэтому вы не можете полагаться на результаты. Компакт/исправление не пересчитывает, поэтому нет очевидного способа исправить плохие результаты.

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


Дом Указатель наконечников Топ

Почему следует использовать запросы вместо вычисляемых полей для таблиц доступа

В статье объясняется, почему пользователям следует избегать использования c вычисляемых полей в базе данных и вместо этого использовать запросы.

MS Access позволяет своим пользователям создавать вычисляемые столбцы (тип поля) в дизайне таблицы для выполнения различных вычислений, но чаще нарушает правила нормализации. Поэтому рекомендуется использовать запросы вместо вычисляемых полей. В этой статье этот момент будет подробно рассмотрен.

Вычисляемые поля в MS Access

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

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

Запросы

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

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

 Сумма: [Количество] * [Единичная стоимость] 

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

Сохранение вычисленного результата

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

В версии MS Access 2010 можно выбрать тип вычисляемых данных, который будет отображать выражение. Пользователи могут ввести это выражение (например, [Количество]*[Цена за единицу]), и Access будет выполнять вычисления каждый раз, когда пользователь вводит запись. Проблема с этой функцией заключается в том, что существует ограниченное количество выражений, что ограничивает пользователей в использовании ее в реальных целях.

Как пользователь Access вы всегда должны быть готовы к инцидентам с повреждением данных. Если вы столкнулись с таким сценарием, не стесняйтесь вызывать мощный инструмент, такой как DataNumen Access Repair, для исправления файлов mdb.

Введение автора:

Вивиан Стивенс является экспертом по восстановлению данных в компании DataNumen, Inc., которая является мировым лидером в области технологий восстановления данных, включая программные продукты восстановления SQL и Excel. Для получения дополнительной информации посетите сайт www.datanumen.

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

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