- •Министерство образования и науки Российской Федерации
- •В информационных технологиях и информационных системах
- •Часть II
- •1. Особенности проектирования многотабличных баз данных
- •2 Определение связей между таблицами
- •2.1 Объединения
- •2.2 Ограничения и поддержание целостности данных
- •2.2.1 Ограничения в базе данных
- •2.2.2 Поддержание целостности данных
- •2.3 Связывание таблиц
- •2.4 Создание форм для ввода данных
- •3 Многотабличные запросы
- •4 Создание форм на основе нескольких таблиц или многотабличных запросов
- •4.1 Создание подчиненных форм
- •4.2 Вычисление итоговых значений
- •4.3 Добавление в существующую подчиненную форму другой подчиненной формы
- •4.4 Связывание главной и подчиненной форм
- •4.5 Всплывающие формы и окна диалога
- •5 Макросы и модули
- •6 Создание интерфейса
- •Задания для самостоятельной работы
- •Литература
- •Часть II
- •610000, Киров, ул. Ленина, 104
5 Макросы и модули
При помощи макросов можно автоматизировать отдельные действия, не погружаясь в программирование. Запись макросов происходит по принципу магнитофона: отдельные действия, необходимые для определенной операции, записываются в нужной последовательности, а затем воспроизводятся любое количество раз простым нажатием кнопки. Например, для перехода к форме при открытии базы данных можно использовать специальный макрос. Тогда при открытии соответствующей базы данных на экране будет появляться форма.
Макросы могут не вполне удовлетворять потребностям пользователя. В этом случае можно воспользоваться языком программирования, имеющимся в Access. При помощи этого языка автоматизируются сложные действия, например, сложные вычисления в отчете. Можно запрограммировать функцию вычислений и использовать ее, когда это необходимо.
Для программирования в ACCESS используется процедурный язык Visual Basic для приложений (VBA) c добавлениями объектных расширений и элементов SQL. VBA является стандартным подмножеством Visual Basic, поддерживающим в основном такие же объекты, свойства, методы и другие языковые элементы. Кроме того, VBA – расширяемый язык, который можно обогащать подключением внешних библиотек. Хотя создать приложения в Access можно и без программирования, в большинстве случаев придется написать, по крайней мере, несколько строк кода, чтобы конкретизировать поведение объектов и компонентов приложения. И, кроме того, если разработчик приступает к формированию высокофункционального продукта, знание основ программирования просто необходимо.
Программирование на Visual Basic базируется на объектах, и структура кода близка к модели физического представления объектов на экране. По определению, объекты содержат код и данные. Форма, которую пользователь видит на экране – представление свойств, которые определяют ее вид и поведение. Для каждой формы и отчета в приложении Access имеется модуль, который содержит ассоциированный описывающий их программный код.
Программные модули – важнейший компонент приложений Access. Существует два типа модулей; модули класса и стандартные модули. Модуль класса используется для создания объектов, которые могут вызываться из процедур приложения. В отличие от стандартного модуля, который содержит только код, модуль класса содержит и код, и данные.
Модули форм и модули отчетов в Access являются модулями класса, связанными с определенной формой или отчетом. Фактически, формы – это модули класса, которые могут иметь размещенные с них элементы управления и выводить на экран окна формы. Каждый такой модуль может содержать объявления переменных, констант, типов и внешних процедур уровня формы или отчета, а также процедуры обработки событий - разделы кода, где помещаются инструкции, которые выполнятся в ответ на определенные события. Формы и отчеты могут содержать элементы управления. Для каждого элемента управления в модуле формы или отчета имеется соответствующий набор процедур событий. В дополнение к процедурам обработки событий, модули формы могут содержать главные процедуры (General), которые не связаны с событиями и выполняются по вызову из любой процедуры события формы. Код модуля формы или отчета может также обращаться к другим объектам данного приложения.
Процедура Sub – блок кода, который выполняется в ответ на событие или по вызову. Если код в модуле разбит на процедуры Sub, его проще сопровождать или отлаживать. При каждом вызове процедуры выполняются инструкции между Sub и End Sub. Процедуры Sub могут быть помещены в стандартные модули, модули класса и модули формы и отчета.
Когда объект Visual Basic распознает, что произошло событие, он автоматически вызывает встроенную процедуру, используя имя, соответствующее событию. Так как имя устанавливает ассоциацию между объектом и кодом, можно сказать, что процедуры обработки событий присоединены к формам и элементам управления:
Имя процедуры обработки события для элемента управления строится из фактического имени элемента управления, символа подчеркивания и имени события. Например, при щелчке командной кнопки с именем Кнопка1, будет вызвана процедура события Кнопка1_Click.
В имени процедуры обработки события для формы объединяется слово «Form» (для отчета – «Report»), символ подчеркивания и имя события. При щелчке на поле формы будет вызвана процедура Form_Click.
Для всех процедур обработки событий используется один общий синтаксис для события элемента управления:
Private Sub Form_имя-события (параметры)
…
…
Инструкции
…
…
End Sub
Хотя процедуры обработки событий можно написать с самого начала, проще использовать заготовки кода, обеспечиваемые Access; они автоматически включают правильные имена процедур.
Е
сть
множество задач, решение которых требует
знания языка VBA.
Часто бывает необходимо подводить итоги
за какой-либо конкретный период. Например,
в ИС «Межгород» необходимо подвести
итоги по разговорам за месяц. Чтобы
корректно решить эту задачу, лучше всего
написать небольшие процедуры для
обработки нескольких событий.
Но
сначала для подведения итогов за месяц
в базу данных для удобства нужно добавить
еще одну таблицу, которая содержит номер
и название месяца. Д
анные
из этой таблицы будут браться для поля
со списком при создании формы.
Для того, чтобы создать форму для вывода результатов за месяц, сначала создается запрос, в котором из связанных таблиц выбираются необходимые поля (Рисунок 5.1).
На
основе этого запроса создается ленточная
форма, в которую в режиме Конструктора
нужно добавить Поля
со списком
для выбора месяца и года (Рисунок 5.2).
При запуске формы, а также при смене
месяца или года, информация на форме
должна соответствующим образом
изменяться, чтобы с
оответствовать
выбранным параметрам даты.
Именно здесь необходимо использовать процедуры обработки событий.
Событиями в данном случае являются обновление содержимого ПолеСоСписком12 или ПолеСоСписком10.
Для добавления процедур нужно воспользоваться окном свойств элементов в режиме Конструктора (Рисунок 5.3). Текст процедур приведен на Рисунке 5.4. Первая процедура устанавливает при открытии формы текущее значение месяца и года. Во второй процедуре изменяется содержимое информации на форме при смене года. В третьей процедуре – информация изменяется при смене месяца. По сути, на данные накладывается фильтр и выводятся данные, удовлетворяющие условиям фильтра.
‘Процедура открытия формы.
‘При открытии формы устанавливается текущий месяц и год
Private Sub Form_Open(Cancel As Integer)
ПолеСоСписком12.Value = Month(Date)
ПолеСоСписком10.Value = Year(Date)
mon = ПолеСоСпискомì12.Value
god = ПолеСоСписком10.Value
Me.Filter="Month([Дата разговора ="& mon & " and Year([Дата разговора]) ="& god
Me.FilterOn = True
End Sub
‘Процедура обновления данных после смены значения года
Private Sub ПолеСоСписком10_AfterUpdate()
mon = ПолеСоСписком12.Value
god = ПолеСоСписком10.Value
Me.Filter ="Month([Дата разговора])="& mon & "and Year([Дата разговора])="& god
'Me.FilterOn = True
'Me.Requery
End Sub
‘Процедура обновления данных после смены значения месяца
Private Sub ПолеСоСписком12_AfterUpdate()
mon = ПолеСоСписком12.Value
god = ПолеСоСписком10.Value
Me.Filter ="Month([Дата разговора])="& mon & "and Year([Дата разговора])="& god
'Me.FilterOn = True
'Me.Requery
End Sub
Рисунок5.4 - Процедуры обработки событий
Более подробно прочитать об использовании языка VBA при создании приложений в Access можно в [4].
