
- •Санкт-Петербургский
- •Оглавление
- •Запуск Access
- •Интерфейс пользователя Access
- •НастройкиAccess
- •Создание новой бд
- •Таблицы
- •Создание структуры таблицы
- •Типы данных
- •Свойства полей
- •Загрузка таблицы данными
- •Модификация структуры таблицы
- •Работа с макетом таблицы
- •Печать таблицы
- •Запросы
- •Типы запросов
- •Создание qde-запросов
- •Заполнение бланка запроса
- •Работа с построителем выражений
- •Примеры запросов
- •Запросы на выборку данных
- •Запросы на создание таблицы
- •Запросы на добавление записей
- •Insert into Det ( dim, cena )
- •Insert into Det ( dim, cena )
- •Values ("шайба", 40);
- •Insert into Новая ( pim, gor )
- •Запросы на удаление записей
- •Запросы на обновление полей записей
- •Перекрестные запросы
- •Вложенные запросы
- •Sql-запросы
- •Фильтрация данных
- •13.1. Создание однотабличной формы
- •13.2. Редактирование формы
- •13.3. Часто используемые свойства формы
- •13.4. Элементы управления на форме и их свойства
- •14. Отчеты
- •14.1. Создание отчета
- •14.2. Работа с отчетом в режиме конструктора
- •14.3. Сортировка и группировка данных
- •15. Макросы
- •15.1. Создание макросов
- •15.2. Краткая характеристика основных макрокоманд
- •15.3. Групповые макросы
- •15.4. Реализация ветвлений в макросах
- •15.4.1. Примеры макросов с односторонним ветвлением
- •15.4.2. Пример макроса с двусторонним ветвлением
- •15.5. Реализация циклов в макросах
- •16. Основы создания пользовательского интерфейса
- •16. 1. Взаимодействие форм
- •16. 2. Требования, предъявляемые к интерфейсу пользователя
- •Литература
15.4.2. Пример макроса с двусторонним ветвлением
Пример 15.Требуется при просмотре деталей в формеДеталисделать так, чтобы на форме появлялась надписьДорогая,если цена детали превышает, например, 100 руб., иначе – надпись Дешевая. Если цена не введена, то надписей не должно быть.
Для решения этой задачи нужно выполнить следующую цепочку действий:
открыть форму Det в режиме конструктора;
нанести на форму надпись Дорогая и отформатировать ее, используя свойства макета надписи;
сделать надпись невидимой, для чего нужно задать значение свойству Вывод на экран этой надписи значение Нет;
нанести на форму надпись Дешевая и отформатировать ее;
аналогично сделать надпись невидимой, для чего нужно задать значение свойству Вывод на экран этой надписи значение Нет;
переместить на форме одну из надписей так, чтобы она «наложилась» на другую надпись. В принципе этого можно не делать, но такое расположение надписей создает некоторый комфорт (сервис) для пользователя БД;
создать условный макрос по имени дорогая_дешевая, который показан на рисунке 89 (при создании макроса нужно включить кнопку Показать все действия на ленте).
ЗдесьVisible(быть
видимым) – свойство элемента управленияНадпись.Это
свойство можно найти в построителе
выражений в окне свойств (правое окно
в построителе выражений). КонстантыИстинаиЛожьтакже
можно найти в построителе выражений в
папкеКонстанты.Вместо этих констант
можно использовать другие, допустимые
значения для логических выражений(да,нетили-1,0).
связать событиеТекущая записьформыDetсмакросомдорогая_дешевая;
открыть форму Det в режиме формы и, переходя от записи к записи, убе-
Рисунок 89 – Макрос дорогая_дешевая диться в правильности решения зада-
чи.
15.5. Реализация циклов в макросах
Для реализации циклов в макросах используется макрокомандаЗапускМакроса.Рассмотрим примеры.
Пример 16.Выдать на экран три раза одно и то же сообщение. Для решения этой задачи можно три раза использовать макрокомандуОкноСообщения,а можно это сделать с помощью цикла:
создать макрос, содержащий единственную макрокомандуОкноСообщения,в аргументах которой укажем повторяемое сообщение, например, слово Ура!. Сохранить макрос, задав ему имя, например,Сообщить.
создать другой макрос по имениЗапуск сообщения, который показан на рисунке 90:
Рисунок 90 – Макрос Запуск сообщения
исполнить макросЗапуск сообщения.
Рассмотрим более сложные примеры.
Пример 17.Пусть имеем загруженную данными таблицуDet.Требуется отобрать в отдельную таблицу детали с ценой больше 100 руб.,а в другую таблицу – остальные детали.Эту задачу можно решать несколькими способами.
Способ 1.С использованием запросов:
создать запрос с именем Дорогие на создание таблицыпо имениДорогие детали,куда будут отбираться записи из таблицыDet,с условием отбора>100для поляCENA;
cоздать запрос с именем Дешевые на создание таблицыпо имениДешевые детали,куда будут отбираться остальные детали, в том числе и те, цена для которых не введена; запрос показан на рисунке 91;
!!! Талицы и запросы должны иметь разные имена
Рисунок 91 – Запрос на создание таблицы дешевых деталей и цена которых не введена
создать макрос по имениОтбор деталей, который показан на рисунке 92:
Рисунок 92 – Макрос для отбора деталей в таблицы Дешевые детали и Дорогие детали
Макрокоманда УстановитьСообщения запрещает вывод системных сообщений.
Но тогда макрос выполнится «молча». Чтобы проинформировать пользователя БД, что макрос «сделал свое дело» нужно его завершить макрокомандой ОкноСообщения, как показано на рисунке 92.
исполнить макросОтбор деталей.В результате будут созданы две таблицыДорогие деталииДешевыедеталис отобранными данными.
Способ 2.С использованием циклов в макросах.
Просматривая записи от первой до последней в таблицеDet,будем копировать запись либо в одну таблицу, либо в другую в зависимости от значения поля CENA.Причем работу с данными таблиц будем осуществлять через формы. Последовательность шагов может быть такой:
создать пустую таблицу для дорогих деталей. Назовем ееДорДет.Ее структура должна быть такой же, как и структура таблицыDet за исключением ключевого поля, которое должно быть не счетчиком, а числовым:
выделить таблицуDetв окне браузера объектов;
скопировать ее в буфер обмена;
вставить из буфера обмена, указав в открывшемся окне факт копирования только структуры (соответствующий переключатель);
сохранить таблицу с именем ДорДет;
открыть таблицу ДорДет в режиме конструктора, и, если ключевое поле – счетчик, то заменить его на числовое;
аналогично создать пустую таблицу для дешевых деталей и деталей без цены по имениДешДет;
создать автоформыДорДетиДешДет,источником данных для которых являются соответствующие таблицы;
создать условный макрос по имениОтбор,который буде выполняться в цикле при условии, что формаDetоткрыта (предполагается, что формаDetбыла заранее создана). Этот макрос в зависимости от значения поляCENAв формеDetбудет копировать запись из таблицыDetв таблицуДорДетилиДешДетчерез соответсвующие формы. МакросОтборприведен на рисунке 93:
Рисунок 93 – МакросОтбор
создать макрос Завершение отбора, который даст возможность убедиться в правильности заполнения данными таблиц ДорДет и ДешДет, а также закрыть все вспомогательные открытые объекты, то есть корректно завершить задачу (см. рисунок 94);
создать макросОтборв цикле,который запускает два макроса: Отбор и Завершение отбора.
Макрос Отбор в цикле показан на ри-
сунке 95.
В этом макросе вместо аргументаЧис-
ло повторовможно указатьУсловие
повтора:
Not is Null (Формы![Det]![DIM]),
что означает“Пока не пусто значение
поля DIM в таблице Det”.Это условие можно использовать, если для всех де-
талей введено имя. Здесь поле DNис
пользовать нельзя, так как DN – ключ.
Рисунок 94 – Макрос Завершение отбора
на форму Det в режиме конструктора нанести кнопку, на которой написать
Отбор в цикле;
связать событиеНажатие кнопкис макросомОтбор в цикле.
открыть формуDetв режиме формы,1спо кнопкеОтбор в циклеи убедиться, что поставленная задача решается правильно.
Рисунок 95 – Макрос Отбор в цикле