Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пос_БД_SQL_Server_Access.doc
Скачиваний:
9
Добавлен:
01.03.2025
Размер:
2.41 Mб
Скачать

3.9. Вычисления в форме

Вычисления в каждой записи формы. Чтобы произвести вычисления на основе данных одной записи в форме, необходимо создать вычисляемый элемент управления, в который записывается выражение. Для создания вычисляемого элемента управления надо открыть форму в режиме Конструктор и, нажав на панели элементов кнопку Поле (аб|) разместить вычисляемый элемент управления в нужном месте. Затем в объект свободный вносится выражение, в объект поле надпись. Выражение должно начинаться со знака равенства (=). В качестве операндов выражения чаще всего используются имена полей, константы, а в качестве операторов – знаки арифметических операций.

Рассмотрим пример создания вычисляемого поля. Пусть таблица или запрос, на которых строится форма, содержит данные о сдаче экзаменов за последнюю сессию и имеет поля: ФИЗИКА, МАТЕМАТИКА, ПРОГРАММИРОВАНИЕ, ИНЖЕНЕРНАЯ ГРАФИКА. В форме нужно подсчитать средний балл каждого студента, создав вычисляемый элемент управления и записав в него выражение:

=([ФИЗИКА]+[МАТЕМАТИКА]+

[ПРОГРАММИРОВАНИЕ]+[ИНЖЕНЕРНАЯ ГРАФИКА])/4

Для объекта с именем Свободный вызывают контекстное меню, выбирают пункт меню Свойства, вкладку Данные, строку Данные. При этом можно внести формулу в строке Данные вручную, а можно воспользоваться кнопкой Построитель выражений (…), которая находится в данной строке. В окне построителя выражений имеется панель кнопок с различными операторами и есть возможность выбрать из списка нужные поля (активизировав во второй нижней части окна строку <список полей>) и функции.

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

Пример 1. Пусть имеется две таблицы ПОСТАВКА и СКЛАД, требуется при вводе новой записи в таблицу ПОСТАВКА увеличивать поле ОСТАТОК в таблице СКЛАД на величину введенного количества. Порядок действий следующий:

создать с помощью мастера форм форму, в которой отразить все поля из таблицы ПОСТАВКА и поле ОСТАТОК из таблицы СКЛАД;

открыть созданную форму в режиме конструктора;

выделить поле КОЛИЧЕСТВО, открыть окно свойств для данного поля (кнопка Свойства на панели инструментов или контекстное меню, пункт Свойства);

в окне свойств выбрать вкладку События, щелкнуть в строке После обновления, щелкнуть по кнопке Построитель выражений, выбрать пункт меню Программы, щелкнуть по кнопке ОК; при этом мы попадаем в процедуру обработки события, связанного с обновлением поля КОЛИЧЕСТВО;

набрать оператор присваивания

[ОСТАТОК]=[ОСТАТОК]+[КОЛИЧЕСТВО]

сохранить процедуру, закрыть окно процедуры и окно свойств, сохранить форму, выйти из режима конструктора.

Пример 2. Пусть имеется две таблицы НАЗНАЧЕНИЕ НА РЕЙС и ТИПЫ САМОЛЕТОВ. Необходимо, чтобы при внесении записи в таблицу НАЗНАЧЕНИЕ НА РЕЙС поле КОЛИЧЕСТВО МЕСТ автоматически заполнялось и равнялось аналогичному полю из таблицы ТИПЫ САМОЛЕТОВ. Автоматическое заполнение пусть происходит при заполнении поля НОМЕР САМОЛЕТА. Порядок действий следующий:

создать с помощью мастера форм форму для ввода данных в таблицу НАЗНАЧЕНИЕ НА РЕЙС и дополнительно выбрать поле КОЛИЧЕСТВО МЕСТ из таблицы ТИПЫ САМОЛЕТОВ (если таблицы не связаны между собой, то необходимо выбрать поле связи из третьей таблицы, через которую связаны первые две);

отобразить созданную форму в режиме конструирования;

выделить поле НОМЕР САМОЛЕТА, открыть окно его свойств, выбрать вкладку События, строку После обновления, щелкнуть по кнопке Построитель выражений, выбрать пункт меню Программы и щелкнуть по кнопке ОК;

набрать в теле процедуры оператор приcваивания

[НАЗНАЧЕНИЕ НА РЕЙС_КОЛИЧЕСТВО МЕСТ]=

[ТИПЫ САМОЛЕТОВ_КОЛИЧЕСТВО МЕСТ]

сохранить процедуру, закрыть окно процедуры и окно свойств, сохранить форму, выйти из режима конструктора.

Вывод сообщений при неправильном вводе и обеспечение повторного ввода.

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

создать с помощью Автоформы в столбец форму для ввода данных в таблицу Сотрудники;

открыть созданную форму в режиме конструктора;

выделить поле Дата рождения, открыть окно свойств для данного поля (кнопка Свойства на панели инструментов или контекстное меню, пункт Свойства);

в окне свойств выбрать вкладку События, щелкнуть в строке После обновления, щелкнуть по кнопке Построитель выражений, выбрать пункт меню Программы, щелкнуть по кнопке ОК; при этом мы попадаем в процедуру обработки события, связанного с обновлением поля Дата рождения;

внести следующие операторы

If Year(Date()) – Year([Дата рождения]) < 18 Then

[Дата рождения] = Null

[Должность].SetFocus

[Дата рождения].SetFocus

MsgBox “ Возраст меньше 18 лет“, vbOKOnly

End If

сохранить процедуру, закрыть окно процедуры и окно свойств, сохранить форму, выйти из режима конструктора.

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

Пусть требуется просуммировать значения поля КОЛИЧЕСТВО в таблице ПОСТАВКА. Порядок действий следующий:

отразить форму ПОСТАВКА в режиме конструктор;

нажать на панели элементов кнопку Поле и разместить элемент управления в области примечания формы (итоговые значения всегда нужно размещать в области примечания формы);

выделить элемент свободный и внести туда выражение

= Sum([КОЛИЧЕСТВО]), при этом можно внести формулу сразу или воспользоваться окном свойств, где выбрать вкладку Данные, строку Данные, кнопку Построитель выражений;

во вкладке Макет окна свойств можно задать формат поля и количество цифр в десятичной части числа;

выделить элемент поле и внести итоговую надпись.

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

Пример. Пусть требуется подсчитать для каждой модели суммарную продажу (Sum([Количество])) в подчиненной форме Продажа-ПФ и вывести эти данные в области данных главной формы Устройства-Продажа. Порядок действий следующий:

отобразить подчиненную форму Продажа-ПФ в режиме конструктора;

в данной форме в области примечания формы создать вычисляемый элемент управления (с помощью кнопки Поле панели элементов) и внести туда выражение, содержащее статистическую функцию подсчета суммы =Sum([Количество]); запомнить имя созданного элемента управления (допустим это было имя “Поле10”); сохранить произведенные действия и выйти из режима конструктора;

отобразить основную форму Устройства-Продажа в режиме конструктора; в основной части формы создать поле с помощью кнопки Поле на панели элементов и записать туда выражение:

= [Продажа-ПФ] . [Form]![Поле10]

Это выражение является ссылкой на элемент управления Поле10 в подчиненной форме.

Общий формат такой ссылки имеет вид:

первый вариант ссылки

=[Имя подчиненной формы].[Form]![Имя поля в подчиненной форме]

или второй вариант ссылки

=Forms![Имя главной формы]![Имя подчиненной формы]![Имя поля].

Например:

=Forms![Устройства-Продажа]![Продажа-ПФ]![Поле10]

Пересчет поля в главной форме при изменении или вводе значения в поле подчиненной формы. Пусть имеются основная форма Устройства-Продажа и подчиненная форма Продажа-ПФ для таблиц УСТРОЙСТВА и ПРОДАЖА, между которыми существует связь «один-ко-многим». Требуется пересчитывать поле Количество на складе в основной форме при изменении или вводе данных в поле Количество в подчиненной форме, если поле Количество меньше или равно поля Количество на складе, в противном случае выдать сообщение об ошибке и обеспечить повторный ввод информации. Порядок действий:

отобразить подчиненную форму ПРОДАЖА-ПФ в режиме конструктора;

выделить поле Количество и открыть для него окно свойств (кнопка Свойства на панели инструментов или в контекстном меню пункт Свойства);

в окне свойств перейти во вкладку События, в строке После обновления щелкнуть по кнопке Построитель выражений, выбрать пункт меню Программы и щелкнуть по кнопке ОК; при этом мы попадаем в процедуру обработки события;

набрать следующие операторы

IF FORMS![Устройства-Продажа]![Количество на складе] > [Количество] THEN

FORMS![Устройства-Продажа]![Количество на складе] = FORMS![Устройства-Продажа]![Количество на складе] –

[Количество]

ELSE

[Количество] = NULL

[Дата продажи].SetFocus

[Количество].SetFocus

MsgBox “ Количество больше количества на складе “, vbOKOnly

End If

сохранить процедуру, закрыть окна процедуры, свойств, конструирования формы.