Access 2002. Самоучитель
Шрифт:
Итак, программирование с помощью VBA имеет ряд преимуществ. Еще раз подчеркнем их:
• процедуры VBA находятся внутри определения формы или отчета. Если вы перемещаете или копируете эту форму или отчет в другую БД, то процедуры VBA автоматически перемещаются вместе с ней, в отличие от макросов (последние придется переместить или скопировать отдельно);
• если ни одна из встроенных в систему функций не удовлетворяет вашим требованиям, то язык VBA позволяет создавать процедуры, состоящие из специализированных функций. Впоследствии они могут также использоваться вместо сложных выражений;
• макросы обрабатывают все множество записей. С использованием процедур VBA можно просматривать и обрабатывать записи по отдельности, изменяя команды в зависимости от установленных значений;
• аргументы макроса нельзя изменить во время его работы. Напротив, когда выполняется процедура VBA, ей можно передавать другие значения или определять переменные в качестве аргументов;
• процедура VBA позволяет обнаружить ошибку, перехватить сообщение о ней и заменить его на более информативный для пользователя совет;
• язык VBA чрезвычайно удобен для создания определений объектов БД и для манипулирования ими. Вы можете изменить свойства этих объектов, а также добавить или удалить элементы управления.
Что касается языка XML, то он
Резюме
1. Access предоставляет пользователю возможность работы с несколькими языками программирования:
– SQL (Structured Query Language) – структурированным языком запросов. Это формальный стандартизованный язык высокого уровня, содержащий средства непроцедурной (не требующей программирования) спецификации запросов;
– макросами;
– VBA (Visual Basic for Applications) – объектно-ориентированным языком программирования;
– XML (Extensible Markup Language) – расширяемым языком разметки, предназначенным для сбора, адаптации и совместного использования данных в неограниченном числе приложений и форматов.
2. Каждый из этих языков занимает определенную функциональную нишу. В настоящей главе приведен краткий обзор возможностей этих языков и даны общие рекомендации по их использованию.
Глава 10 Программирование с использованием макросов
Функции макросов
Макросы бывают двух видов: единичные, то есть состоящие из одной макрокоманды, и сложные. В последнем случае макрос включает несколько последовательно выполняемых макрокоманд, объединенных общим именем. Каждая макрокоманда осуществляет определенную операцию: установить значения, открыть/закрыть таблицу, найти запись и т. д. Как правило, макрос автоматически запускается при наступлении какого-либо события: например, пользователь щелкает той или иной кнопкой мыши, открывает таблицу, переходит от одного поля к другому и т. п. Чтобы запустить макрос, надо указать его имя. Если макрос запускается в ответ на событие, он должен быть присоединен к соответствующему свойству формы, отчета и т. д. (см. главу 4, в частности раздел «Заголовок формы»).
Макросы могут использоваться для выполнения довольно широкого диапазона операций. Например, макросы позволяют:
• открывать отчет для просмотра или печати;
• переходить от одного элемента управления (записи, поля) к другому;
• устанавливать свойства объекта;
• выполнять разнообразные команды и т. д.
Использование макросов для обработки событий
Наиболее часто макросы применяются для обработки событий. При этом макрос может функционировать и как самостоятельная программа, и в составе процедуры VBA (Visual Basic for Applications). Первый вариант мы рассмотрим в этом разделе, а второй станет предметом нашего внимания в главе 12.
Понятие события
Событие – это любое действие пользователя: щелчок кнопкой мыши, открытие формы и т. д. Событие может также инициироваться каким-либо оператором Visual Basic или самой системой Access. События связываются с формами, отчетами, разделами форм и отчетов, а также с элементами управления форм, в частности с полями. Откликом на событие может быть выполнение процедуры обработки событий на языке VBA или макроса.
Что такое обработка события? Например, давайте посмотрим, как выглядят свойства поля формы (пусть это будет форма Страны). Откроем ее в режиме конструктора (см. рис. 10.1).
Рис. 10.1
Надо открыть также список событий, предусмотренных для какого-либо поля данной формы (например, для поля Код). Для этого следует либо дважды щелкнуть левой кнопкой мыши в пределах этого поля, либо щелкнуть там же правой кнопкой мыши и в появившемся контекстном меню выбрать опцию Свойства. Когда на экране возникнет одноименное окно, откройте в нем вкладку Событие. В результате будет выведен искомый список возможных событий (см. рис. 10.2).
Событие возникает для этого поля в следующих случаях:
• при обновлении поля (до или после операции);
• при открытии/закрытии поля;
• при активизации/дезактивизации поля, когда оно получает или теряет фокус;
• при использовании кнопок мыши (щелчок, двойной щелчок, движение курсора вверх или вниз);
• при использовании клавиатурных клавиш (нажатие клавиши, движение курсора вверх или вниз);
• при перемещении курсора.
Для другого элемента управления (например, для кнопки, текстового поля и т. д.) перечень событий, предусматриваемых в Access 2002, может быть несколько иным, но тоже достаточно длинным.
Последовательности событий
Разработчик, который встраивает в систему определенные реакции программы на действия пользователя, должен учитывать следующее. Каждая отдельная операция (допустим, переход от одного элемента управления к другому) может повлечь за собой ряд событий, возникающих в определенной последовательности. Очень важно знать ее, поскольку от порядка событий зависят условия и очередность выполнения макросов и процедур обработки событий. Предположим, созданы две такие процедуры, и они должны выполняться в определенной последовательности. Значит, пользователь должен быть уверен, что события, вызывающие эти процедуры, возникают в том же порядке.
Порядок событий для элементов управления в формах События элемента управления возникают в форме при переводе фокуса на элемент управления, а также при изменении или обновлении данных в этом элементе.Перевод фокуса на элемент управления
Так, при переходе фокуса в форму, в которой выводится один или несколько активных элементов управления, или при переходе к другому элементу управления в этой же форме возникают события в следующем порядке:
Вход • Получение фокуса.
Названные события возникают также после того,
как пользователь откроет форму, то есть после операций Открытие, Текущая запись. Последовательность в данном случае такова:Открытие (для формы) • Включение (для формы) • Текущая запись (для формы) Вход (для элемента управления) • Получение фокуса (для элемента управления).
Теперь рассмотрим иную ситуацию: элемент управления теряет фокус. Например, форма, в которой активизируются один или несколько элементов управления, закрывается или пользователь переходит к другому элементу управления в той же форме. В таком случае возникают события:
Выход • Потеря фокуса.
Когда пользователь закрывает форму, события Выход и Потеря фокуса возникают перед операциями, связанными с этим закрытием: Выгрузка, Отключение, Закрытие. Порядок будет таким:
Выход (для элемента управления) • Потеря фокуса (для элемента управления) • Выгрузка (для формы) • Отключение (для формы) • Закрытие (для формы).Изменение и обновление данных в элементе управления
Предположим, пользователь включает в элемент управления формы новые данные или изменяет существующие, а затем переводит фокус на другой элемент управления. Тогда возникают события До обновления и После обновления, происходящие в следующем порядке:
До обновления • После обновления.
События Выход и Потеря фокуса для изменяемого элемента управления возникают после событий До обновления и После обновления:
До обновления • После обновления • Выход • Потеря фокуса.
Если пользователь модифицирует текст, который находится в поле, или изменяет содержимое поля со списком, то возникает событие Изменение. Отметим, что оно происходит при любом изменении содержимого элемента управления, причем до перехода к другому элементу управления или к другой записи (следовательно, до возникновения событий До обновления и После обновления). Если курсор находится в поле, то щелчок по любой клавише, соответствующей символу, вызывает следующие события:
Клавиша вниз • Нажать клавишу • Изменение • Клавиша вверх.
Событие Отсутствие в списке возникает, когда пользователь вводит в поле со списком значение, отсутствующее в этом списке, а затем пытается перейти к другому элементу управления или к другой записи. Событие Отсутствие в списке происходит также после событий клавиатуры и события Изменение для поля со списком, но до возникновения любых событий в элементе управления или формы. Если для свойства поля со списком Ограничиться списком задано значение Да, то сразу после события Отсутствие в списке возникает событие формы Ошибка:
Клавиша вниз • Нажать клавишу • Изменение • Клавиша вверх.
Порядок событий записи в формеСобытия записи возникают в форме в следующих случаях:
• при переводе фокуса на запись;
• при обновлении содержимого записи;
• при удалении существующей записи/записей;
• при создании новой записи.
Перемещение фокуса по записям и обновление содержимого записей
При переводе фокуса на запись, существующую в форме, при вводе новых или изменении существующих данных в записи, а также при переходе к другой записи той же формы возникает такая последовательность событий:
Текущая запись • До обновления • После обновления • Текущая запись.
При выходе из измененной записи, но до входа в новую запись возникают события Выход и Потеря фокуса. Они происходят для того последнего элемента управления, на котором находился фокус. Эти события возникают после событий формы До обновления и После обновления:
До обновления (для формы) • После обновления (для формы) • Выход (для элемента управления) • Потеря фокуса (для элемента управления) • Текущая запись (для формы).
При переводе фокуса с одного элемента управления на другой возникают события для каждого из этих элементов. Например, возможны такие последовательности событий:
• открытие формы и изменение данных в элементе управления:
Текущая запись (для формы) • Вход (для элемента управления) • Получение фокуса (для элемента управления) • До обновления (для элемента управления) • После обновления (для элемента управления);
• перевод фокуса на другой элемент управления:
Вход (для элемента управления) • Потеря фокуса (для элемента управления 1) • Вход (для элемента управления 2) • Получение фокуса (для элемента управления 2);
• перевод фокуса на другую запись:
До обновления (для формы) • После обновления (для формы) • Выход (для элемента управления 2) • Потеря фокуса (для элемента управления 2) • Текущая запись (для формы).
Удаление записейКогда пользователь удаляет запись, в форме возникают следующие события:
Удаление • До подтверждения удаления • После подтверждения удаления.
Перед этим Microsoft Access обязательно выводит диалоговое окно, предлагая подтвердить удаление. Если пользователь отменяет событие Удаление, то события До подтверждения удаления и После подтверждения удаления не возникают и диалоговое окно не выводится.
Создание новой записиЕсли пользователь переводит фокус на новую (пустую) запись в форме или создает новую запись, вводя символы с клавиатуры, то события возникают в следующем порядке:
Текущая запись (для формы) • Вход (для элемента управления) • Получение фокуса (для элемента управления) • До вставки (для формы) • После вставки (для формы).
Отметим, что события До обновления и После обновления для элементов управления в форме и для новой записи возникают после события До вставки, но до события После вставки.
Порядок событий клавиатуры и мышиСобытия клавиатуры возникают в имеющих фокус формах или в элементах управления формы при нажатии клавиш или при передаче команд клавиатуры.
События мыши возникают для форм, разделов форм и элементов управления в формах при щелчке по кнопке мыши, если в этот момент ее указатель установлен на форме, разделе формы или элементе управления.