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

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

Как заставить Аксесс хранить результат вычислений?

Например, если у вас есть поля Количество и ЦенаЗаЕдиницу, как заставить Аксесс записать Количество * ЦенаЗаЕдиницу в поле Стоимость?

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

Место вычисляемых полей ― в запросах, а не в таблицах.

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

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

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

  1. Создайте запрос, основанный на этой таблице.
  2. Запишите выражение в строке конструктора запроса:
    Стоимость: [Количество] * [ЦенаЗаЕдиницу]

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

Вы все еще хотите хранить вычисляемые поля?

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

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

Чтобы получить это, используйте событие AfterUpdate контрола на вашей форме, чтобы автоматически посчитать плату:

  1. Выставьте значение свойства AfterUpdate текстового поля Количество на [Обработка события] .
  2. Нажмите кнопку построителя (. ). Аксесс откроет окно редактора кода
  3. Введите эту строку между строками Private Sub. и End Sub:
  4. Установите свойство After Update текстового поля ЦенаЗаЕдиницу на [Обработка события] , и нажмите кнопку построителя.
  5. Введите следующую строчку:

Теперь, каждый раз, когда меняется Количество или ЦенаЗаЕдиницу, Аксесс автоматически пересчитает новую плату, но пользователь может перезаписать вычисление и ввести другое число, если потребуется.

Если у вас возник вопрос, как бы помочь пользователю с вычислением с помощью описанного приема, см. Enter text in calculated controls.

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

Аксесс 2010 позволяет создать вычисляемое поле в таблице вот таким образом:

Просто выберите «Вычисляемый» из типов данных и ниже появится строка «Выражение». Впишите выражение. Аксесс будет пересчитывать его каждый раз, когда вы вводите запись.

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

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

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

Источник:
http://alx-artamonov.narod.ru/index/0-2

Создание вычисляемых полей

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

  1. Создайте свободный элемент управления типа Поле (Text Box) в нужном месте формы.
  2. Прямо в поле введите выражение =Date (). Знак равенства обязателен.
  3. Откройте окно Свойства (Properties) для этого элемента и задайте для свойства Формат поля (Format) желаемый формат даты, например Длинный формат даты (Long Date).
  4. Установите длину поля таким образом, чтобы в нем помещалось необходимое количество символов.
  5. Измените название метки этого текстового поля. Созданное поле будет выглядеть, как показано на рис. 9.47.

Рис. 9.47. Вычисляемое поле

Обычно для создания вычисляемых полей выбирают именно элемент управления Текстовое поле, хотя это и необязательно. Допускается использовать для этого любые элементы управления, имеющие свойство Данные (Control Source).

Именно в свойстве Данные (Control Source) должно быть задано выражение, которое вычисляет значение этого элемента. Ввод выражения допускается прямо в элемент управления, как мы и сделали это в примере. Однако, если выражение достаточно длинное, его неудобно вводить прямо в поле. Можно ввести выражение в ячейку свойства Данные (Control Source) в окне Свойства (Properties), а если выражение не помещается в ячейке свойства, просто нажать комбинацию клавиш + и открыть окно Область ввода (Zoom). Еще можно воспользоваться Построителем выражений.

Вычисляемые поля создаются чаще всего в табличных или ленточных формах для отображения столбца с какими-нибудь вычисленными значениями. Например, стоимость товара рассчитывается как значение выражения Цена * Количество. Для отображения таких расчетных данных используют два способа:

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

Замечание

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

Первый способ в большинстве случаев предпочтительнее, т. к. такой запрос может быть использован не только в одной форме, но и в отчетах и в других формах. Примером такой организации расчетов может служить форма «Подчиненная форма заказов» (Orders Subform) базы данных «Борей». Она основана на запросе «Сведения о заказах» (Order Details Extended), в котором создано вычисляемое поле «ОтпускнаяЦена» (ExtendedPrice), содержащее формулу:

в примере английской версии Access:

Свойство Данные (Control Source) элемента управления ОтпускнаяЦена

(ExtendedPrice) в форме имеет значение «ОтпускнаяЦена» (ExtendedPrice) — имя вычисляемого поля запроса.

Замечание

В приведенной выше формуле CCur — это функция, которая преобразует значение выражения в тип Денежный (Currency).

Источник:
http://www.taurion.ru/access/9/35

Создание базы данных в MS Access 2007: пошаговая инструкция

В современном мире нужны инструменты, которые бы позволяли хранить, систематизировать и обрабатывать большие объемы информации, с которыми сложно работать в Excel или Word.

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

Продукт от Microsoft Office представляет собой упрощенную версию в функциональном плане и более понятную для неопытных пользователей. Давайте рассмотрим пошагово создание базы данных в Access 2007.

Описание MS Access

Microsoft Access 2007 – это система управления базами данных (СУБД), реализующая полноценный графический интерфейс пользователя, принцип создания сущностей и связей между ними, а также структурный язык запросов SQL. Единственный минус этой СУБД – невозможность работать в промышленных масштабах. Она не предназначена для хранения огромных объемов данных. Поэтому MS Access 2007 используется для небольших проектов и в личных некоммерческих целях.

Но прежде чем показывать пошагово создание БД, нужно ознакомиться с базовыми понятиями из теории баз данных.

Определения основных понятий

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

  1. Предметная область – множество созданных таблиц в базе данных, которые связаны между собой с помощью первичных и вторичных ключей.
  2. Сущность – отдельная таблица базы данных.
  3. Атрибут – заголовок отдельного столбца в таблице.
  4. Кортеж – это строка, принимающая значение всех атрибутов.
  5. Первичный ключ – это уникальное значение (id), которое присваивается каждому кортежу.
  6. Вторичный ключ таблицы «Б» – это уникальное значение таблицы «А», использующееся в таблице «Б».
  7. SQL запрос – это специальное выражение, выполняющее определенное действие с базой данных: добавление, редактирование, удаление полей, создание выборок.

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

Создание БД

Для наглядности всей теории создадим тренировочную базу данных «Студенты-Экзамены», которая будет содержать 2 таблицы: «Студенты» и «Экзамены». Главным ключом будет поле «Номер зачетки», т.к. данный параметр является уникальным для каждого студента. Остальные поля предназначены для более полной информации об учащихся.

Читайте также  Создание вычисляемых полей

Итак, выполните следующее:

  1. Запустите MS Access 2007.
  2. Нажмите на кнопку «Новая база данных».
  3. В появившемся окне введите название БД и выберите «Создать».

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

Создание и заполнение таблиц

После успешного создания БД на экране появится пустая таблица. Для формирования ее структуры и заполнения выполните следующее:

  1. Нажмите ПКМ по вкладке «Таблица1» и выберите «Конструктор».
  2. Теперь начинайте заполнять названия полей и соответствующий им тип данных, который будет использоваться.

Создание и редактирование схем данных

Перед тем, как приступить к связыванию двух сущностей, по аналогии с предыдущим пунктом нужно создать и заполнить таблицу «Экзамены». Она имеет следующие атрибуты: «Номер зачетки», «Экзамен1», «Экзамен2», «Экзамен3».

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

  1. Перейти во вкладку «Работа с базами данных».
  2. Нажать на кнопку «Схема данных».
  3. Если схема не была создана автоматически, нужно нажать ПКМ на пустой области и выбрать «Добавить таблицы».
  4. Выберите каждую из сущностей, поочередно нажимая кнопку «Добавить».
  5. Нажмите кнопку «ОК».

Конструктор должен автоматически создать связь, в зависимости от контекста. Если же этого не случилось, то:

  1. Перетащите общее поле из одной таблицы в другую.
  2. В появившемся окне выберите необходимы параметры и нажмите «ОК».
  3. Теперь в окне должны отобразиться миниатюры двух таблиц со связью (один к одному).

Выполнение запросов

Что же делать, если нам нужны студенты, которые учатся только в Москве? Да, в нашей БД только 6 человек, но что, если их будет 6000? Без дополнительных инструментов узнать это будет сложно.

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

Виды запросов

SQL синтаксис реализует принцип CRUD (сокр. от англ. create, read, update, delete — «создать, прочесть, обновить, удалить»). Т.е. с помощью запросов вы сможете реализовать все эти функции.

На выборку

В этом случае в ход вступает принцип «прочесть». Например, нам нужно найти всех студентов, которые учатся в Харькове. Для этого нужно:

  1. Перейти во вкладку «Создание».
  2. Нажать кнопку «Конструктор запросов» в блоке «Другие».
  3. В новом окне нажмите на кнопку SQL.
  4. В текстовое поле введите команду: SELECT * FROM Студенты WHERE Адрес = «Харьков»; где «SELECT *» означает, что выбираются все студенты, «FROM Студенты» — из какой таблицы, «WHERE Адрес = «Харьков»» — условие, которое обязательно должно выполняться.
  5. Нажмите кнопку «Выполнить».
  6. На выходе мы получаем результирующую таблицу.

А что делать, если нас интересуют студенты из Харькова, стипендии у которых больше 1000? Тогда наш запрос будет выглядеть следующим образом:

SELECT * FROM Студенты WHERE Адрес = «Харьков» AND Стипендия > 1000;

а результирующая таблица примет следующий вид:

На создание сущности

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

  1. Перейти во вкладку «Создание».
  2. Нажать кнопку «Конструктор запросов» в блоке «Другие».
  3. В новом окне нажмите на кнопку SQL, после чего в текстовое поле введите команду:

CREATE TABLE Преподаватели
(КодПреподавателя INT PRIMARY KEY,
Фамилия CHAR(20),
Имя CHAR (15),
Отчество CHAR (15),
Пол CHAR (1),
Дата_рождения DATE,
Основной_предмет CHAR (200));

где «CREATE TABLE» означает создание таблицы «Преподаватели», а «CHAR», «DATE» и «INT» — типы данных для соответствующих значений.

  1. Кликните по кнопке «Выполнить».
  2. Откройте созданную таблицу.
На добавление, удаление, редактирование

Здесь все гораздо проще. Снова перейдите в поле для создания запроса и введите следующие команды:

  • для заполнения кортежа:
    INSERT INTO Преподаватели
    VALUES (1, ‘Иванова’, ‘Иванна’, ‘Ивановна’, ‘Ж’, ’05-06-1981′, ‘География’);
  • для редактирования записи:
    UPDATE Преподаватели SET Имя = ‘Анна’;
  • для удаления:
    DELETE * FROM Преподаватели WHERE Имя=’Анна’;.

Создание формы

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

  1. Откройте интересующую таблицу.
  2. Перейдите во вкладку «Создание».
  3. Нажмите на необходимый формат формы из блока «Формы».

Все базовые функции MS Access 2007 мы уже рассмотрели. Остался последний важный компонент – формирование отчета.

Формирование отчета

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

Если вы никогда не сталкивались с подобной функцией, рекомендуется воспользоваться встроенным «Мастером отчетов». Для этого сделайте следующее:

  1. Перейдите во вкладку «Создание».
  2. Нажмите на кнопку «Мастер отчетов» в блоке «Отчеты».
  3. Выберите интересующую таблицу и поля, нужные для печати.
  4. Добавьте необходимый уровень группировки.
  5. Выберите тип сортировки каждого из полей.
  6. Настройте вид макета для отчета.
  7. Выберите подходящий стиль оформления.

Если отображение вас не устраивает, его можно немного подкорректировать. Для этого:

  1. Нажмите ПКМ на вкладке отчета и выберите «Конструктор».
  2. Вручную расширьте интересующие столбцы.
  3. Сохраните изменения.

Итак, с уверенностью можно заявить, что создание базы данных в MS Access 2007 мы разобрали полностью. Теперь вам известны все основные функции СУБД: от создания и заполнения таблиц до написания запросов на выборку и создания отчетов. Этих знаний хватит для выполнения несложных лабораторных работ в рамках университетской программы или использования в небольших личных проектах.

Для проектирования более сложных БД необходимо разбираться в объектно-ориентированном программировании и изучать такие СУБД, как MS SQL и MySQL. А для тех, кому нужна практика составления запросов, рекомендую посетить сайт SQL-EX, где вы найдете множество практических занимательных задачек.

Удачи в освоении нового материала и если есть какие-либо вопросы – милости прошу в комментарии!

Источник:
http://geekon.media/sozdanie-bazy-dannyx-v-ms-access-2007/

MICROSOFT OFFICE ACCESS 2007. Создание запросов

— научиться создавать различные виды запросов;

— научиться редактировать данные в запросах;

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

В результате выполнения лабораторной работы студент должен:

— создавать запрос в режиме конструктора любого вида;

— редактировать данные в запросах.

Пояснения к работе

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

Для этого необходимо:

— выбрать необходимые поля из таблицы «Главная»;

— для того чтобы данные в поле «ФИО» выводились в алфавитном порядке нужно на поле «ФИО» установить критерий упорядочивания по возрастанию.

Порядок выполнения работы

Создание простого запроса, формирующий список сотрудников.

1. Откройте вашу базу данных. Появится окно базы данных.

2. Раскройте вкладку «Создание» далее на верхней панели нажмите кнопку «Мастер запросов» (рис. 14.1). Появится диалоговое окно «Новый запрос» (рис. 14.2), в котором можно выбрать тип запроса (простой, перекрестный, повторяющиеся записи, записи без подчиненных). Выберите пункт «Простой запрос» и нажмите кнопку «ОК».

Рис. 14.1 — Вкладка «Создание» и «Мастер запросов»

Рис. 14.2 — Диалоговое окно «Новый запрос»

3. В появившемся диалоговом окне запроса (рис. 14.3.) содержаться вкладки, которые позволяют выбрать существующие таблицы для добавления в новый запрос. (Эти таблицы уже содержатся в вашей базе данных).

Рис. 14.3 — Диалоговое окно «Создание запроса»

4. Выберите из списка таблицу «Главная» и выберите поле «ФИО», «Дата рождения» и «Должность» (рис. 14.4).

Рис. 14.4 — Диалоговое окно «Создание запроса»

5. Нажмите кнопку «Готово». Появится простейший запрос (рис. 14.5).

Рис. 14.5 — Запрос «Список сотрудников»

6. Для того чтобы все фамилии были в алфавитном порядке наведите курсор мыши на фамилию и нажмите на правую кнопку мыши, вызвав тем самым контекстное меню, и выберите пункт «Сортировка от А до Я» (рис. 14.6).

Рис. 14.6 — Результат запроса «Список сотрудников» в порядке возрастания значений поля «ФИО»

1. Организовать запрос к базе данных, который бы позволял продемонстрировать:

— фамилии (ФИО) в алфавитном порядке и должности сотрудников;

— сумму денежного содержания сотрудников и значения компонентов, из которых она формируется.

Порядок выполнения работы

1. Откройте вашу базу данных. Появится окно базы данных.

2. Раскройте вкладку «Создание» на верхней панели задач. Далее нажмите на кнопку «Мастер запросов».

3. Появится диалоговое окно «Новый запрос». В этом окне выберите из списка «Простой запрос» и нажмите «Ок». Затем из списка таблиц выберите «Таблица Главная» и выберите все доступные поля. Нажмите «Далее». В появившемся диалоговом окне выберите подробный (вывод каждого поля из каждой записи) отчет и нажмите «Готово».

4. Перейдите в режим конструктора (рис. 14.7).

Рис. 14.7 — Режим конструктора

5. Теперь нужно добавить остальные таблицы. Для этого нужно нажать на верхней панели задач кнопку «Отобразить таблицу», вызвав контекстное меню (нужно нажать правую кнопку на компьютерной мыши), выберите пункт «Добавить таблицу . ». Появится диалоговое окно «Добавление таблицы». Выберите все остальные таблицы из списка, нажимая кнопку «Добавить» (рис. 14.8). Затем нажмите «Закрыть».

Рис. 14.8 — Добавление таблиц

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

— оклад по должности;

— надбавка за стаж;

— надбавка за вредность;

— надбавка за удаленность;

— надбавка за ученую степень.

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

7. Отсортируйте поле «ФИО» «по возрастанию» (рис. 14.9).

Рис. 14.9 — Семь полей из разных таблиц, на поле «ФИО» установлена сортировка «по возрастанию»

8. Сохраните запрос в файле базы данных под именем «Расчет заработной платы». Для этого закройте запрос и переименуйте его. Для того чтобы снова открыть запрос, нужно сначала перейти в режим конструктора.

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

а. В окне конструктора перейдите к незаполненной колонке запроса, установите курсор в строку «Поле». Для использования «Построителя выражений» нажмите кнопку «Построитель» на верхней панели инструментов (рис. 14.10).

Рис. 14.10 — Диалоговое окно построителя выражений

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

— выберите поле «Оклад по должности», нажмите кнопку «Вставить»;

— с клавиатуры введите число 1,15 (чтобы рассчитать сумму оклада с уральским коэффициентом);

— выберите следующее поле (в нашем случае — это «Надбавка за стаж»), нажмите кнопку «Вставить»;

— нажмите кнопку «+» и т.д. до тех пор, пока не просуммируете все надбавки.

в. Нажмите кнопку ОК. Ассеss по умолчанию предоставит вычисляемое поле с именем «Выражение!». Замените имя поля «Выражение» на имя «Сумма», в результате окно конструктора запроса примет вид (рис. 14.11).

Рис. 14.11 — Окно конструктора

Для отображения результата запроса перейдите в режим таблицы (рис. 14.12).

Рис. 14.12 — Результат запроса

После завершения конструирования запроса сохранить запрос.

Источник:
http://infopedia.su/12x3e3e.html

Создание вычисляемых полей на форме

Создание вычисляемого поля на подчиненной форме

Задание: добавить на подчиненную форму многотабличной формы (рис. 23) вычисляемое поле для расчета стоимости каждого товара

стоимость = цена * количество.

1. Многотабличная форма (рис. 23) открывается в режиме конструктора (рис. 25).

Рис. 25. Многотабличная форма в режиме конструктора

2. На вкладке Конструктор в разделе Элементы управления выбирается объект Поле (), который прорисовывается на подчиненной форме (рис. 26). Элементы управления описаны в Приложении 2.

форма интерфейс база данный

Рис. 26. Добавление на форму нового поля

Вместо текста «Поле12:» записывается подпись Стоимость (рис. 27).

Рис. 27. Подпись для поля

4. Задается имя поля. Для этого выделяется поле (), на вкладке Конструктор в разделе Сервис нажимается кнопка Страница свойств.

5. В появившемся диалоговом Окне свойств осуществляется переход на закладку Все и в строке Имя задается новое имя Стоимость (рис. 28).

Рис. 28. Определение имени поля

6. Записывается формула для расчета стоимости. Для этого в окне Свойства открывается вкладка Данные и в строке Данные нажимается кнопка . На экране отобразится окно построителя выражений (рис. 29).

7. В разделе Элементы выражений двойным щелчком раскрывается раздел Подчиненная форма. В разделе Категории выражений отобразятся все объекты, расположенные на подчиненной форме (рис. 30).

Рис. 29. Построитель выражений

Рис. 30. Поля многотабличной формы

8. Двойным щелчком мыши имена полей вставляются в формулу (рис. 31). После написания формулы нажимается кнопка ОК.

Рис. 31. Формула

9. В окне Свойства на вкладке Макет в разделе Формат поля устанавливается формат Денежный.

10. Для просмотра работы формулы необходимо открыть многотабличную форму в режиме Форма (рис. 32).

Рис. 32. Вычисляемое поле

Создание итоговых вычисляемых полей

Задание: добавить на многотабличную форму вычисляемое поле для расчета суммарной стоимости всех товаров по каждой накладной (рис. 33).

Рис. 33. Поле Итого по накладной

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

1. Многотабличная форма открывается в режиме конструктора (рис. 44).

2. На вкладке Конструктор в разделе Элементы управления выбирается объект Поле (), который прорисовывается в примечании подчиненной формы (рис. 44).

Рис. 34. Добавление на форму нового поля

Вместо текста «Поле 19:» записывается подпись Итого: (рис. 35).

4. Задается имя поля. Для этого выделяется поле (), на вкладке Конструктор в разделе Сервис нажимается кнопка Страница свойств. В появившемся диалоговом окне отрывается вкладка Все и в строке Имя записывается новое имя Итого (рис. 36).

Рис. 35. Подпись для поля

Рис. 36. Определение имени поля

5. Вводится формула. Для этого в окне Свойства активизируется вкладка Данные и в строке Данные нажимается кнопка . На экране отобразится окно построителя выражений (рис. 37).

6. В разделе Элементы выражений Построителя выражений двойным щелчком раскрывается раздел Подчиненная форма.

7. Двойным щелчком мыши поля Цена и Количество добавляются в формулу (рис. 37). Записывается формула, где Sum — функция, позволяющая суммировать значения полей.

8. После написания формулы нажимается кнопка ОК.

9. В окне Свойства на вкладке Макет в разделе Формат поля устанавливается формат Денежный. Окно Свойства закрывается.

Рис. 37. Формула

10. На вкладке Конструктор в разделе Элементы управления выбирается объект Поле (), который прорисовывается в примечании Многотабличной формы. В надписи записывается текст Итого по накладной (рис. 38).

Рис. 38. Добавление на форму нового поля

11. Задается имя поля. Для этого выделяется поле (), на вкладке Конструктор в разделе Сервис нажимается кнопка Страница свойств. В появившемся диалоговом окне открывается вкладка Все и в строке Имя записывается новое имя Итого_по_накладной (рис. 39). В именах полей не рекомендуется использовать пробелы, поэтому они заменяются знаком нижнего подчеркивания.

Рис. 39. Определение имени поля

12. Записывается формула, по которой будет происходить расчет данных поля. Для этого выделяется поле (), на вкладке Конструктор в разделе Сервис нажимается кнопка Страница свойств. В строке Данные вкладки Данные нажимается кнопка . На экране отобразится окно построителя выражений.

13. В разделе Элементы выражений окна Построителя выражений двойным щелчком раскрывается раздел Подчиненная форма.

14. Необходимо сделать ссылку на поле Итого подчиненной формы, в которой находится итоговое значение суммы (рис. 40). Для этого по поля Итого выполняется двойной щелчок левой клавишей мыши.

Рис. 30. Формула

10. После написания формулы нажимается кнопка ОК.

11. В окне Свойства на вкладке Макет в разделе Формат поля устанавливается формат Денежный. Результат можно увидеть при просмотре формы в режиме Формы (рис. 31).

Рис. 41. Поле для расчета итоговой стоимости

Источник:
http://studbooks.net/2277872/informatika/sozdanie_vychislyaemyh_poley_forme

Основные хитрости, применяемые в запросах

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

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

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

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

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

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

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

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

PriceWithTax: [Price] * 1.10

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

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

PriceWithTax: [Products].[Price] * 1.10

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

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

Для добавления вычисляемого поля 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: [Price] * 1.10 создает циклическую ссылку, поскольку имя используемого вами поля такое же, как имя создаваемого поля. Программа Access не допускает подобных проделок.

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

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

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

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

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

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

Источник:
http://crypto.pp.ua/2011/03/osnovnye-xitrosti-primenyaemye-v-zaprosax/