- •Создание запросов sql
- •Зарезервированные слова Jet sql
- •Функции и операторы Access, используемые вместо ключевых слов ansi sql
- •Зарезервированные слова Jet sql и функции, не входящие в ansi sql
- •Эквивалентные типы данных Jet sql и ansi sql
- •Подстановочные знаки при сравнении строк
- •Зарезервированные слова distinctrow и distinct
- •Использование разделителей и символов sql
- •Создание запросов на объединение записей
- •Создание запроса к серверу
- •Управляющие запросы
- •Создание подчиненных запросов
- •Глава 9 .
- •Панель элементов
- •Разновидности элементов управления по типу содержимого
- •Элемент управления Надпись
- •Элемент управления Поле
- •Элементы управления выбора: Выключатель, Переключатель, Флажок и Группа
- •Элемент управления Список
- •Элемент управления Поле со списком
- •Элемент управления Кнопка
- •Элементы управления Свободная рамка объекта и Присоединенная рамка объекта
- •Элемент управления Рисунок
- •Элемент управления Разрыв страницы
- •Элемент управления Набор вкладок
- •Элемент управления Подчиненная форма/отчет
- •Элементы управления Линиям Прямоугольник
- •Преобразование одного элемента управления в другой
- •Создание многотабличных форм
- •Использование Мастера форм для создания главной и подчиненной форм
- •Добавление подчиненной формы в главную форму
- •Синхронизация данных в элементах формы
- •Создание многостраничных форм
- •Добавление и удаление страниц в наборе вкладок
- •Изменение порядка следования страниц
- •Свойства элемента управления Набор вкладок
- •Всплывающие формы и диалоговые окна
- •Вычисления в формах
Вычисления в формах
Вычисления в формах используются:
при создании вычисляемых полей, т. е. таких элементов управления, значения которых вычисляются на основе значений других элементов управления или встроенных функций;
для вычисления значения по умолчанию элементов управления формы;
в выражениях, с помощью которых задаются некоторые свойства элементов управления, например условие на значение, условия для отбора записей в форме и ряд других.
Правила составления выражений в Access мы уже описывали (см. разд. "Использование выражений в запросах" гл. 4). Поэтому здесь мы остановимся в первую очередь на вычисляемых полях формы и опишем, где они нужны и как их создать.
Внимание
Формулы для вычислений в Access записываются с помощью специального синтаксиса, который диктует правила записи формул и в выражениях Access и в процедурах на VBA. Этот синтаксис несколько отличается от принятого в математике, однако во многом на него похож и интуитивно понятен. Описание синтаксиса вычислительных формул приведено в разд. "Выражения в Access" гл. 4.
Создание вычисляемых полей
Простейшим вычисляемым полем является поле, в котором должна выводиться текущая дата. Чтобы создать такое поле:
Создайте свободный элемент управления типа Поле (Text Box) в нужном месте формы.
Прямо в поле введите выражение =Date (). Знак равенства обязателен.
Откройте окно Свойства (Properties) для этого элемента и задайте для свойства Формат поля (Format) желаемый формат даты, например Длинный формат даты (Long Date).
Установите длину поля таким образом, чтобы в нем помещалось необходимое количество символов.
Измените название метки этого текстового поля. Созданное поле будет выглядеть, как показано на рис. 9.47.
Рис. 9.47. Вычисляемое поле
Обычно для создания вычисляемых полей выбирают именно элемент управления Текстовое поле, хотя это и необязательно. Допускается использовать для этого любые элементы управления, имеющие свойство Данные (Control Source).
Именно в свойстве Данные (Control Source) должно быть задано выражение, которое вычисляет значение этого элемента. Ввод выражения допускается прямо в элемент управления, как мы и сделали это в примере. Однако, если выражение достаточно длинное, его неудобно вводить прямо в поле. Можно ввести выражение в ячейку свойства Данные (Control Source) в окне Свойства (Properties), а если выражение не помещается в ячейке свойства, просто нажать комбинацию клавиш <Shiftl>+<F2> и открыть окно Область ввода (Zoom). Еще можно воспользоваться Построителем выражений.
Вычисляемые поля создаются чаще всего в табличных или ленточных формах для отображения столбца с какими-нибудь вычисленными значениями. Например, стоимость товара рассчитывается как значение выражения Цена * Количество. Для отображения таких расчетных данных используют два способа:
Первый способ основан на том, что форма строится на базе запроса, в который включают вычисляемые столбцы. В форме создается текстовое поле, у которого в качестве источника данных указывается вычисляемый столбец запроса. Поле блокируется, чтобы пользователь не мог изменить данные в нем, ведь эти данные вычисляются в процессе выполнения запроса.
Во втором случае форма может строиться прямо на базе таблицы. В ней создается текстовое поле, в котором в качестве источника данных указывается выражение, например = [Цена за единицу] * Количество. При этом в выражении необязательно указываются те поля, которые включены в форму, а любые поля базовой таблицы.
Замечание
При ссылках на поля в выражениях обязательно использование квадратных скобок, если название поля содержит пробелы; в остальных случаях можно обходиться без них.
Первый способ в большинстве случаев предпочтительнее, т. к. такой запрос может быть использован не только в одной форме, но и в отчетах и в других формах. Примером такой организации расчетов может служить форма "Подчиненная форма заказов" (Orders Subform) базы данных "Борей". Она основана на запросе "Сведения о заказах" (Order Details Extended), в котором создано вычисляемое поле "ОтпускнаяЦена" (ExtendedPrice), содержащее формулу:
ОтпускнаяЦена:
CCur([Заказано].[Цена]*[Количество]*(1-[Скидка])/100}*100
в примере английской версии Access:
ExtendedPrice:
CCur([Order Details].UnitPrice*[Quantity]*(1-[Discount])/100)*100
Свойство Данные (Control Source) элемента управления ОтпускнаяЦена
(ExtendedPrice) в форме имеет значение "ОтпускнаяЦена" (ExtendedPrice) — имя вычисляемого поля запроса.
Замечание
В приведенной выше формуле CCur — это функция, которая преобразует значение выражения в тип Денежный (Currency).
Создание вычисляемых полей для отображения итоговых значений
Можно создать вычисляемые поля в форме, которые будут содержать итоговые значения для нескольких записей. Например, требуется рассчитать сумму счета или заказа, просуммировав данные по каждой позиции счета.
Особенностью создания итогового поля в подчиненной форме является то," что в функции Sum нельзя использовать имя вычисляемого элемента управления, можно использовать только имя вычисляемого поля в базовом запросе. Если же суммируе-
Хотя такое вычисляемое поле уже есть в базе данных "Борей", рассмотрим в качестве примера процедуру его создания:
Создайте в области примечаний формы "Подчиненная форма заказов" (Orders Subform), содержащей позиции заказа, вычисляемое текстовое поле. В качестве значения этого поля задайте итоговую сумму: =Sum( [ОтпускнаяЦена] ) (или =Sum( [ExtendedPrice])). То есть это поле рассчитывается как сумма значений поля "ОтпускнаяЦена" (ExtendedPrice) для всех позиций заказа (рис. 9.48).
Так как это поле не отображается, когда форма выводится на экран в режиме Таблицы, нужно в главной форме — "Заказы" (Orders) — создать еще одно вычисляемое поле, для которого в качестве источника данных необходимо указать итоговое поле подчиненной формы (рис. 9.49):
=[Подчиненная форма заказов].Form1ПромежуточнаяСумма
или:
=[Orders Subform].Form1[Order Subtotal]
Рис. 9.48. Поле для вычисления итогового значения
Особенностью создания итогового поля в подчиненной форме является то, что в функции Sum нельзя использовать имя вычисляемого элемента управления, можно использовать только имя вычисляемого поля в базовом запросе. Если же суммируемые значения вычисляются пряма в форме, то в формуле для итогового поля придется повторить выражение для расчета этих значений. Например, если бы элемент управления ОтпускнаяЦена (ExtendedPrice) рассчитывался по той же формуле в форме, т. е. в качестве источника данных для него стояло выражение:
=ССur ([Заказано]. [Цена]*[Количество]*(1-[Скидка])/100)*100,
в свойстве Данные (Control Source) для элемента управления ПромежуточнаяСумма (Order Subtotal) пришлось бы ввести выражение
=Sum(CCur([Заказано].[Цена]*[Количество]*(1-[Скидка] ) /100)*100).
Это еще один аргумент в пользу того, что лучше такие вычисления выполнять в базовом запросе.
Рис. 9.49. Вычисляемое поле в главной форме "Заказы"
Замечание
Имена вычисляемых элементов управления нельзя использовать не только в функции Sum, но и в других статистических функциях, как агрегатных, так и в функциях по подмножеству.
Использование статистических функций в формах
При использовании статистических функций не обрабатываются записи, которые содержат пустое значение (Null) в указанных полях. Например, выражение Sum( [В наличии] + [Принято] - [Отпущено] - [Заказано] ) будет возвращать значение Null, если хотя бы одно из полей, участвующих в выражении, содержит пустое значение. Чтобы предотвратить такие ошибки в вычислениях, следует использовать функцию Nz, которая преобразует пустое значение в нулевое. Значит, описанное выше выражение должно выглядеть так:
Sum(Nz([В наличии])+Nz([Принято])-Nz([Отпущено])-Nz([Заказано]))
В табл. 9.3 приведены наиболее часто используемые в формах статистические функции (см. также разд. "Функции" гл. 4).
Таблица 9.3. Статистические функции
|
|
|
|
|
Функция |
Описание |
|
|
Sum |
Сумма значений поля |
|
|
Avg |
Среднее значение поля |
|
|
Min |
Минимальное значение поля |
|
|
Max |
Максимальное значение поля |
|
|
Count |
Количество значений поля |
|
|
DSum |
Сумма значений в указанном подмножестве записей |
|
|
DAvg |
Среднее значение в указанном подмножестве записей |
|
|
DCount |
Количество записей в подмножестве |
|
|
DLookup |
Значение конкретного поля в указанном подмножестве записей |
|
|
DMin, DMax |
Минимальное и максимальное значения поля в указанном подмножестве записей |
|
|
|
|
|
В таблице приведены и обычные статистические функции и статистические функции по подмножеству. В вычисляемых элементах управления форм могут использоваться и те и другие. При этом статистические, функции по подмножеству, как правило, используются, если требуется ограничить набор обрабатываемых записей, в противном случае используют простые статистические функции. У статистических функций по подмножеству задаются три аргумента: выражение, домен и критерий отбора. Выражение в данном случае может состоять из имени поля в домене, а также может быть комбинацией операций над полями в домене, константами, именами элементов управления (в форме), вызовами функций. Домен — это таблица, запрос или инструкция SQL, т. е. набор записей, являющийся источником данных для заданного выражения. Критерий — необязательный параметр, задающий условие отбора записей в домене, в виде предложения WHERE на языке SQL (но без самого ключевого слова WHERE). Все три параметра задаются в виде строкового значения. Результатом функции является обработка значений заданного выражения для всех выбранных по заданному критерию записей в домене.
Ниже приводятся примеры использования статистических функций.
