Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Е.А. Бессонов Access. Объекты и события

.pdf
Скачиваний:
170
Добавлен:
19.08.2013
Размер:
216.46 Кб
Скачать

Министерство образования Российской Федерации

Государственное учреждение Кузбасский государственный технический университет

Кафедра вычислительной техники и информационных технологий

ACCESS

Объекты и события

Методические указания к лабораторной работе для студентов специальности “Экономика и управление на предприятиях ” по курсу “Автоматизация экономических расчетов ”

Составитель Е.А. Бессонов

Утверждены на заседании кафедры Протокол № 10 от 26.06.01

Рекомендованы к печати учебнометодической комиссией специальности

060800

Протокол № 1 от 27.09.01

Электронная копия хранится в библиотеке главного корпуса ГУ КузГТУ

Кемерово 2002

1

Введение

Базы данных (БД) MS Access состоят из объектов. Основные объекты (таблицы, запросы, формы, отчеты, макросы, модули) представлены в окне базы данных. Процедуры на языке VBA (Visual Basic for Applications) позволяют выполнять над объектами больше действий, чем это позволяют интерактивные средства и макросы. Можно, например, создать процедуру, которая позволяет работать с двумя открытыми базами данных одновременно. В диалоговом режиме можно открыть только одну базу данных. Программы, как и макросы, могут реагировать на события. Предполагается, что читатель знаком с макросами, событиями и пользовательскими функциями VBA.

ВMS Access некоторые объекты могут содержать в себе другие объекты. Так, например, форма содержит элементы управления (ЭУ). ЭУ может быть формой (подчиненная форма) и, в свою очередь, содержать ЭУ (иерархия объектов). Каждый тип объекта обладает набором свойств, методов и семейств. Многие свойства объектов можно задавать в диалоговом режиме (надпись на кнопке, размеры поля в форме и т. п.), используя бланк свойств данного объекта в режиме конструктора.

Метод – это процедура, которая может работать с данным типом объекта, используя его свойства. Так, например, метод формы SetFocus делает активной открытую форму (устанавливает на нее фокус).

Наборы однотипных объектов могут составлять семейство. Примером семейства может служить Forms – совокупность открытых форм. Семейство само является объектом и может иметь свойства и методы. Так почти все семейства имеют свойство Count (число объектов в семействе).

Вязыке VBA ссылка на объект, принадлежащий к определенному семейству, использует явное описание его как объекта данного семейства. Всего существует 3 способа описания, которые рассмотрим на примере адресации формы “Сотрудники”.

Forms![Сотрудники] Forms(“Сотрудники”) Forms(0)

Во всех вариантах ссылка начинается с указания типа семейства (Forms). В первом варианте используется восклицательный знак. Это оператор, за которым следует имя, заданное пользователем и заключенное в квадратные скобки. Это имя выделяет объект в семействе.

Во втором варианте используются круглые скобки, в которых со-

2

держится выражение. Значение выражения должно быть именем выделяемого объекта. Если нужно просто указать имя объекта, оно должно быть заключено в кавычки.

Втретьем варианте используется номер объекта в семействе. Каждому включаемому в семейство объекту присваивается порядковый номер, начиная с нуля. При исключении объекта из семейства номера корректируются. Этот вариант удобен, если нужно в цикле перебрать все элементы семейства и произвести над ними некоторые действия.

Впрограмме можно задать значение свойства объекту с помощью инструкции присваивания.

Объект.Свойство = Выражение Значение выражения присваивается свойству объекта.

Значение свойства можно присвоить некоторой переменной: Переменная = Объект.Свойство

Формат обращения к методу: Объект.Метод [Аргументы]

Здесь квадратные скобки указывают на то, что аргументы могут отсутствовать. Список аргументов может быть заключен в круглые скобки. В этом случае метод возвращает значение, как процедура-функция. Sub Заголовки()

For I = 0 To Forms.Count – 1 Forms(I).Caption = “Булочная “ & I + 1

Next End Sub

Впроцедуре Заголовки используется свойство Count объекта Forms (количество открытых форм). Цикл For перебирает все открытые формы

спорядковыми номерами от 0 до Count - 1. В теле цикла заголовок (свойство Caption) очередной формы принимает вид “Булочная N”.

Объекты Access

Объекты Control, Form и Report допускают использование объектных переменных. Объектная переменная – это переменная, которая указывает на объект определенного типа. Если такой переменной необходимо присвоить значение, то используется инструкция присваивания, перед которой вставляется слово Set (признак объектного присваивания).

 

3

 

 

Application

Приложение MS Access

Control

Элемент управления формы или отчета

Debug

Окно отладки

Form

Форма, подчиненная форма

Forms

Семейство открытых форм

Module

Модуль формы или отчета

Report

Отчет, подчиненный отчет

Reports

Семейство открытых отчетов

Screen

Экран

Section

Раздел или семейство разделов формы или отчета

Sub Заголовки2() Dim F As Form

Set F = Forms![Успеваемость] F.Caption = “Результаты экзаменов”

End Sub

Инструкция Dim объявляет переменную F как объект типа формы. Следующая инструкция присваивает объектной переменной F ссылку на форму Успеваемость. Последняя инструкция присваивает форме Успеваемость заголовок “Результаты экзаменов”(свойство Caption).

Элементы управления

Переменная типа Control может быть связана с различными элементами управления, которые можно создать с помощью панели элементов.

BoundObjectFrame

Связанная рамка объекта

CheckBox

Флажок

ComboBox

Поле со списком

CommandButton

Кнопка

ListBox

Список

OptionButton

Переключатель

OptionGroup

Группа переключателей

Rectangle

Прямоугольник

SubForm

Подчиненная форма

SubReport

Подчиненный отчет

TextBox

Поле

ToggleButton

Выключатель

Label

Подпись

PageBreak

Перевод страницы

4

В MS Access можно описать объектную переменную типа Control (элемент управления). При использовании объектной переменной для работы с элементами управления может потребоваться определить тип элемента управления для выполнения определенного действия, например для скрытия всех подписей на форме. Для определения типа элемента управления, на который ссылается переменная типа Control, можно воспользоваться следующим вариантом инструкции If:

If TypeOf Элемент Is тип Then ...

Элемент - переменная или аргумент процедуры, описанная с помощью конструкции As Control.

Тип - название типа элемента управления, например CommandButton. Пример

Sub ЧисткаЭУ(F As Object) Dim C As Control, I As Integer For I = 0 To F.Count – 1

Set С = F(I)

If TypeOf C Is TextBox Then C .Visible = False

End If Next

End Sub

F(I) определяет I+1-й элемент управления. F.Count - количество элементов управления в форме. Условие в инструкции IF процедуры ЧисткаЭу истинно, если очередной элемент является полем (TextBox). В этом случае поле становится невидимым, так как становится ложным свойство Visible (видимый). В случае необходимости можно использовать ветвь Else инструкции If.

Sub ЧисткаЭУ2(F As Object) Dim C As Control, I As Integer For I = 0 To F.Count - 1

Set C = F(I)

If TypeOf C Is TextBox Then Else

C.Visible = True End If

Next End Sub

Процедура ЧисткаЭУ2 делает видимыми все ЭУ, кроме полей.

5

Каждый элемент управления имеет десятки свойств. Рассмотрим наиболее распространенные.

Form

ЭУ является подчиненной формой

Report

ЭУ является подчиненным отчетом

Parent

Объект, содержащий данный объект

Section

Раздел формы или отчета, содержащий данный ЭУ

Каждый элемент управления имеет имя (Name), которое служит для обращения к элементу в программе.

События

Вместо построчного выполнения больших программ приложения MS Access запускают макросы или выполняют небольшие процедуры обработки событий при возникновении событий у объектов (изменение данных в поле, нажатие кнопки мыши и т.п.).

По умолчанию MS Access автоматически реагирует на события, используя определенное для каждого объекта встроенное поведение. Например, при изменении пользователем данных в поле MS Access автоматически проверяет тип введенных данных.

В дополнение к этому каждый объект MS Access имеет набор свойств событий, соответствующих каждому из возможных событий данного объекта, например:

Событие

Свойство события

Название в бланке свойств

GotFocus

OnGotFocus

Получение фокуса

KeyDown

OnKeyDown

Клавиша вниз

KeyPress

OnKeyPress

Нажатие клавиши

KeyUp

OnKeyUp

Клавиша вверх

LostFocus

OnLostFocus

Потеря фокуса

MouseDown

OnMouseDown

Кнопка вниз

MouseMove

OnMouseMove

Перемещение указателя

MouseUp

OnMouseUp

Кнопка вверх

Дополнительные действия в ответ на событие можно задать, установив значение нужного свойства события в бланке свойств. При возникновении одного из возможных для объекта событий MS Access использует значение соответствующего свойства события для формирования необходимого отклика.

Если поле свойства события в бланке свойств пусто, то MS Access отреагирует на событие только встроенным поведением объекта (например изобразит нажатие кнопки).

6

Если поле свойства события содержит имя макроса, то MS Access выполнит этот макрос.

Если поле свойства события содержит строку “[Процедура обработки событий]”, то VBA выполнит соответствующую процедуру. Процедуры обработки событий автоматически получают имена в формате Объект_Событие, например, Кнопка1_Click (Click - событие “нажатие кнопки” объекта Кнопка1).

В ответ на событие можно также вызвать функцию, указав в бланке свойств знак равенства и имя функции с аргументами в круглых скобках. Даже если аргументов нет, круглые скобки нужно сохранить.

Работа с базой данных приводит к возникновению цепочек событий. Например, процесс открытия формы включает следующие события: Open (открытие), Load (загрузка), Activate (включение). Могут при этом происходить и другие события, когда активное окно становится неактивным, и фокус перемещается на другой объект.

Некоторые события можно отменить. Например, включив в процедуру обработки события Open формы дополнительные инструкции, можно запретить открытие формы при определенных условиях. Отменить можно следующие события: ApplayFilter (применить фильтр), BeforeDelConfirm (до подтверждения Del), BeforeInsert (до вставки), BeforeUpdate (до обновления), DblClick (двойное нажатие кнопки), Delete (удаление), Exit (выход), Format (форматирование), Open (открытие), Print (печать), UnLoad (выгрузка).

Заголовок процедуры обработки события имеет вид: Sub Объект_Событие()

Объект - имя формы (Form), отчета (Report) или элемента управления, событие которого обрабатывается.

Событие - английское наименование события (Click, DblClick и т. п.). Для обеспечения возможности отмены события в процедуре обра-

ботки события используется аргумент Cancel. Если в процедуре ему присваивается значение True, то событие отменяется.

Много примеров процедур обработки событий дают программымастера.

Пример

Sub Кнопка11_Click()

On Error GoTo Err_Кнопка11_Click DoCmd.GoToRecord , , A_First Exit_Кнопка11_Click:

7

Exit Sub Err_Кнопка11_Click:

MsgBox Error$

Resume Exit_Кнопка11_Click End Sub

Из заголовка процедуры видно, что она запускается, когда по кнопке Кнопка11 производится щелчок мышью (Click).

Первая инструкция имеет вид On Error GoTo Метка. Она настраивает процедуру на обработку ошибок. Если одна из последующих инструкций вызовет ошибку, то вместо стандартного сообщения об ошибке будет выполняться инструкция, имеющая метку. Метка – целое число или слово, начинающееся с первой позиции строки и заканчивающееся двоеточием.

Далее выполняется метод GoToRecord (НаЗапись), имеющий аргументы Тип объекта, Имя объекта, Запись, Смещение.

Тип объекта - таблица, запрос или форма. Это объект, запись которого необходимо сделать текущей. Для текущего объекта (как в нашем случае) следует задать пустой аргумент, как и следующий - Имя объекта.

Запись - запись (следующая, предыдущая, первая, последняя, конкретная, новая), которую необходимо сделать текущей.

Смещение - номер записи, на которую нужно перейти (вариант Конкретная), или число записей для смещения вперед или назад . Значение по умолчанию 1.

В рассматриваемом примере текущим объектом является форма, в которой расположена Кнопка11. Поэтому первые 2 аргумента метода GoToRecord заданы пустыми значениями. Аргумент Запись задан константой A_First (или acFirst, что равносильно) и обеспечивает переход к первой записи базового набора формы. Последний аргумент (смещение) опущен.

Если метод GoToRecord выполняется без ошибок, следующая инструкция Exit Sub обеспечивает выход из процедуры. Если метод GoToRecord не может быть выполнен, происходит переход к инструкции MsgBox с меткой Err_Кнопка11_Click. Инструкция MsgBox выдает диалоговое окно с описанием ошибки (Error$). Инструкция Resume передает управление инструкции Exit Sub с меткой Exit_Кнопка11_Click и осуществляется выход из процедуры.

Если заменить константу A_First, можно обеспечить переход к последней записи (A_Last), предыдущей (A_Previous) или к следующей

8

(A_Next).

С помощью метода DoMenuItem можно получить ряд полезных команд для использования в программах кнопок.

DoCmd.DoMenuItem A_FormBar, A_EditMenu, A_UndoField, A_Menu_Ver20 уничтожает внесенные в запись исправления (восстановление записи). Здесь A_Menu_Ver20 указывает на версию Access (2.0).

DoCmd.GoToRecord , , A_NewRec осуществляет переход к новой записи.

DoCmd.Close закрывает активную форму. DoCmd.Quit закрывает приложение.

DoCmd.DoMenuItem A_FormBar, A_EditMenu, 10, , A_Menu_Ver20 вы-

дает на экран диалог “Поиск и замена”.

Иногда удобно использовать объект Screen (экран), который имеет свойства ActiveControl (активный элемент управления), ActiveForm (ак-

тивная форма), ActiveReport (активный отчет) и PreviousControl (преды-

дущий элемент управления). Данные свойства используются при создании программ, выполнение которых зависит от текущего или предшествующего положения фокуса. Например, можно вывести на экран сообщение, зависящее от того, какая форма является активной.

Пример

Screen.PreviousControl SetFocus DoCmd.FindNext

Метод SetFocus устанавливает фокус на свой объект. В данном случае текущим становится элемент управления, который имел фокус перед этим. Команда FindNext ищет следующую запись.

Очень часто встречается задача открытия той или иной формы. Dim ИмяФормы As String

ИмяФормы = “ Список преподавателей”

DoCmd.OpenForm ИмяФормы

В методе OpenForm (ОткрытьФорму) задан лишь первый аргумент (имя формы). В результате в открытой форме будут представлены все записи.

Dim ИмяФормы As String Dim Критерий As String

ИмяФормы = “ Список преподавателей”

Критерий = “[Должность] = Forms![Форма2]![Должность]” DoCmd.OpenForm ИмяФормы, , , Критерий

9

В открывающейся форме будут представлены лишь те записи, в которых в поле Должность будет то же значение, что и в текущей записи формы Форма2.

Dim ИмяЗапроса As String

ИмяЗапроса = “Запрос 1”

DoCmd.OpenQuery ИмяЗапроса , acVievNormal , acEdit

Метод OpenQuery (ОткрытьЗапрос) имеет 3 аргумента.

Имя запроса

Запрос 1

 

Режим

acViewNormal

Режим таблицы

Режим данных

acEdit

Режим изменения данных

Метод OpenQuery открывает запрос Запрос1 в режиме таблицы для редактирования.

Скрытие формы

При разработке приложений во избежание проблем с целостностью данных разрешается изменять данные в каждый момент времени только в одной форме. Если открыть вторую форму из первой для редактирования данных, то первую форму нужно скрыть. Процедура, закрывающая вторую форму, должна знать, какую форму следует вывести из скрытого состояния.

Function ОткрытьСкрыть (Ф As String) Dim Открывающая As String Открывающая = Screen.ActiveForm.Name Screen.ActiveForm.Visible = False DoCmd.OpenForm Ф Screen.ActiveForm.Tag = Открывающая End Function

Function ЗакрытьПоказать () Dim Скрытая As String

If IsNull (Screen.ActiveForm.Tag) Then DoCmd Close

Else

Скрытая = Screen.ActiveForm.Tag DoCmd Close

DoCmd SelectObject A_Form , Скрытая End If

End Function