• Возврат – происходит при возвращении в предыдущий раздел отчета на стадии его форматирования;
• Отсутствие данных – возникает при отсутствии записей в отчете;
• Страница – возникает, когда отчет отформатирован, но еще не начал печататься. Вы можете использовать данное событие, чтобы изменить оформление отчета для печати.
Как видите, событий много, и они довольно разнообразны. Это делает объекты базы данных и элементы управления очень чувствительными к любым действиям пользователя и к внутренним изменениям, которые происходят в БД. Зато такой набор событий обеспечивает гибкую реакцию программы практически на каждое уточнение, вносимое в базу данных.
Обратите внимание на кнопки, которые расположены справа от каждого события в таблице свойств элемента управления. Щелкнув по стрелке прокрутки, вы откроете список имеющихся макросов и сможете подключить к обработке события любой из них. Кнопка
позволяет активизировать процедуру обработки события на языке VBA Об этом речь пойдет в главе 12.
Автоматический перевод фокуса при помощи макроса
Конкретная задача, которую нам надо решить, заключается в следующем. Как было показано в главе 4, мы используем форму для ввода новых записей. Напомним, что в качестве примера рассматривается форма Страны (см. рис. 10.1). Когда мы внесем новые данные в первое поле (скажем, в поле Код), курсор по умолчанию останется в нем. Однако нам нужно, чтобы он переместился в следующее поле – Страна, потому что после ввода кода надо указать название страны. Курсор придется переводить вручную. Конечно, это не очень сложная операция, но когда таких операций много, пользователь испытывает дополнительные неудобства. Если применять при обработке событий макросы, подобных неприятностей легко избежать.
Итак, автоматический переход курсора (например, из поля Код в поле Страна) должен произойти, когда мы завершим ввод информации в поле Код. Следовательно, макрос в данном случае стоит привязать к событию После обновления. Однако для поля Код принята несколько другая схема обработки – с помощью операторов VBA Подробно она рассматривается в главе 12, но вкратце сводится к следующему. Когда форма Страны открывается, она изначально готова к вводу новой записи: в поле Код автоматически устанавливается ее порядковый номер, а остальные поля пусты. Если пользователь собирается не вводить новую запись, а заглянуть в какую-либо из старых, он может сделать это с помощью стрелки прокрутки в этом поле. Но программа не знает заранее, какая запись понадобится пользователю для просмотра, поэтому форма по умолчанию настроена на то, что наиболее вероятно: она будет открыта для ввода новой записи. Таким образом, нет необходимости вручную вводить значение в поле Код: при открытии формы новый код появляется автоматически. Значит, переход к следующему полю также можно связать с событием Открытие в окне свойств формы. Но возможен и другой путь: соотнести такой переход с событием Получение фокуса для поля Код в окне его свойств. Мы выберем второй вариант.
Чтобы реализовать его, нужно создать команду перехода к следующему элементу управления – полю. Используем для этого макрос.
В окне базы данных откройте вкладку Макросы и щелкните по кнопке
На экране появится окно конструктора макросов (см. рис. 10.3).
Рис. 10.3
В столбце Макрокоманда стрелкой прокрутки надо вызвать выпадающее меню и в нем выбрать нужную команду – в нашем случае К элементу управления. (Использовать стрелку прокрутки не обязательно: введите несколько первых букв названия макрокоманды, а Access 2002 допишет его. Но для этого вы должны точно знать имя макрокоманды, что бывает далеко не всегда.) В поле Примечание вы при желании можете включить любые комментарии к макрокоманде. В поле Аргументы макрокоманды вводятся специфические параметры. Для выбранной нами макрокоманды К элементу управления требуется указать только имя того элемента управления, к которому надо перейти. Естественно, для других макрокоманд аргументы могут быть значительно сложнее, в чем вы убедитесь дальше. Итак, введите в поле Имя элемента имя следующего поля формы, в которое необходимо перейти, – Страна. После этого макросу в окне конструктора можно дать название (по умолчанию будет определено имя Макрос42) и закрыть.
Теперь надо связать созданный макрос с событием Получение фокуса. В окне поля Код (см. рис. 10.2) щелкните по стрелке прокрутки в поле свойства Получение фокуса. В выпадающем меню снова выберите Макрос42 (см. рис. 10.4).
Рис. 10.4
Этого достаточно, чтобы установить связь созданного макроса с событием. Окно, где она задана, надо сохранить. Точно так же задается автоматический переход от одного поля к другому и в этой, и во всех остальных формах. Единственная оговорка: как уже отмечалось, в этих случаях макрос нужно связать с другим свойством – После обновления.
Использование макроса при выполнении сложного запроса
Как вы помните, в главе 7 описывалось создание объединенной выборки записей из разнородных файлов, которые имели различную структуру, были разработаны в различных организациях и в разных программных средах, но интегрированы в единый банк данных в программной среде Access 2002. Выполнять задуманную операцию пришлось в два этапа: сначала формировать запрос на создание таблицы Выборка1 , куда вошли записи из одного файла, а затем генерировать запрос на добавление данных в эту таблицу из другого файла. Сейчас с помощью макроса мы можем объединить оба этапа работы, упростив решение задачи. Мы будем по-прежнему использовать запросы, но организуем их в макропоследовательность, которая имеет название и выполняется как целостная операция.
Прежде чем показать, как это делается, произведем чисто техническое, вспомогательное действие – переименуем запросы, которые нам понадобятся. Запросу Запрос7 дадим название Запрос на создание таблицы, а запросу Запрос8 – Запрос на добавление записей. Такое переименование нужно лишь для того, чтобы при объединении запросов их новые названия наглядно свидетельствовали о функции каждой части созданного макроса.
Как и раньше, откройте окно конструктора макросов, а затем активизируйте опцию Открыть запрос. Этот этап работы показан на рис. 10.5.
Рис. 10.5
У макрокоманды Открыть запрос уже другой список аргументов, каждый из которых имеет свои значения:
• Имя запроса – имена запросов, которые вы хотите включить в создаваемый макрос;
• Просмотр :
– Таблица ;
– Конструктор ;
– Предварительный просмотр при печати ;
• Режим :
– Добавить ;
– Редактировать ;
– Только для чтения .
Выбранные значения показаны на рис. 10.5.
Теперь добавьте к создаваемому макросу второй запрос (см. рис. 10.6): в следующую строку столбца Макрокоманда точно так же, как и в первом случае, введите макрокоманду Открыть запрос. Все дальнейшие действия полностью повторяются, изменяется лишь имя второго запроса – теперь это Запрос на добавление записей.
Рис. 10.6
В сущности, задача решена; осталось только присвоить новому макросу имя. Назовите его Запрос на объединенную выборку. Если вы запустите этот запрос на выполнение, то Access 2002 по ходу процесса выдаст все информационные сообщения и расскажет о том, что из первой таблицы будет добавлено 8 записей, а из второй – 9. Наиболее важным сообщением является предложение удалить таблицу Выборка1: макрос создает ее заново и не хочет делить эту заслугу ни с кем. Впрочем, если у вас не поднимется рука удалить указанную таблицу, система осуществит данное действие сама. Когда новый макрос выполнится, вы получите точно такую же таблицу Выборка1, как та, что показана на рис. 11.41.
1. Макросы могут использоваться для выполнения довольно широкого диапазона операций. Например, макросы позволяют:
– открывать отчет для просмотра или печати;
– переходить от одного элемента управления (записи, поля) к другому;
– указывать свойства объекта;
– выполнять разнообразные команды и т. д.
2. В рамках настоящей главы макросы наиболее часто применяются для обработки событий. Событие – это любое действие пользователя: щелчок кнопкой мыши, открытие формы и т. д. Событие может также инициироваться каким-либо оператором.