Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA_Labs.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
8.08 Mб
Скачать

Лабораторная работа № 2 Выполнение запросов в процедуре обработки события

Цель лабораторной работы: научиться выполнять запросы в процедуре обработки события.

Создайте процедуру, которая подключается при закрытии формы Студент и обновляет число студентов в группах, если список студентов групп сокра­щался или пополнялся новыми записями.

Для подсчета изменившегося числа студентов в группе и обновления поля КОЛ в таблице ГРУППА воспользуйтесь созданными для этих целей запросами Число студентов в группах и Обновление ГРУППА_КОЛ.

Кроме того, для некоторых групп могут быть уничтожены все записи о студентах, а два предыдущих запроса не решают задачу обновления поля КОЛ в этом случае, поэтому потребуется запрос Обнуление ГРУППА_КОЛ без подчиненных в СТУДЕНТ: запрос на обновление.

Рис. 2.1. Запрос на обновление полей в таблице ГРУППА

Выполнение перечисленных запросов в процедуре позволит автоматически поддерживать правильные значения в таблице Группа и освободит пользовате­ля от необходимости помнить и вручную выполнять разрозненные действия.

В процедуре для выполнения запросов может быть использован объект

DoCmd и его метод OpenQuery.

Поскольку при работе с формой может и не производиться изменение числа записей о студентах, предусмотрите в процедуре выход на диалог с пользователем, в результате которого определитесь, нужно ли выполнят обновление таблицы ГРУППА. Для этого используйте функцию MsgBox , которая выводит в диалоговом окне текст, заданный ее первым аргументом, а также кнопки, например, Да и Нет, определяемые вторым аргументом (рис. 2.2), и, как любая функция, возвращает значение. Функция MsgBox возвращает при нажатии кнопки Да числовое значение 1 и при нажатии кнопки Нет2.

Рис.2.2. Диалоговое окно функции MsgBox

Для анализа значения, возвращенного функцией, и принятия решения о дальнейших действиях используйте инструкцию условного перехода:

If условие Then

[инструкции]

[Else

[инструкции]]

End If

Эта инструкция в зависимости от значения выражения, заданного в условии (True или False), выполняет ту или иную группу инструкций.

Для создания процедуры выполните следующие действия:

1. Откройте форму Студент в режиме конструктора.

Рис. 2.3. Инструкции начала и конца процедуры обработки события Закрытие для формы Студент

2. Откройте окно свойств формы на вкладке События. В строке Закрытие (Close) выберите значение [Процедура обработки события] и щелкните на значке построителя в конце строки. Таким образом связывается выполнение создаваемой процедуру с закрытием формы. В открывшемся окне модуля формы в шаблон процедуры обработки события Private Sub Form close () (Рис. 2.3.) запишите инструкции процедуры.

3. Для определения переменных, сохраняющих строковые значения имен запросов и числовое значение, возвращаемое функцией MsgBox, запиши­те инструкцию Dim.

Dim stDocName, stDocName1, stDocName2 As String, Ответ As Integer

4. Запишите инструкцию присваивания переменной ответ значения, воз­вращаемого функцией MsgBox.

Ответ = MsgBox (“Вы добавляли или удаляли записи о студентах в группах ?”, vbYesNo)

5. Приставка vb в значении второго аргумента указывает на использование значения встроенной константы VBA, определяющего вывод в диалого­вом окне кнопок Да и Нет.

6. Для проверки, нажата ли пользователем в диалоговом окне кнопка Нет и выполнения в этом случае инструкции выхода из процедуры Exit Sub, запишите инструкцию условного перехода, опустив необязательную ее часть.

If Ответ = vbNo Then

Exit Sub

End If

7. Если переменная Ответ получила значение, соответствующее нажатию кнопки Нет, выполняется инструкция, следующих за Then и завершаю­щая процедуру по Exit Sub, иначе выполнение процедуры продолжается с инструкции, следующей за End if.

8. Для обновления поля КОЛ в таблице Группа запишите инструкции вы­полнения перечисленных выше запросов. Используйте объект DoCmd и применяемый к данному объекту метод OpenQuery. Аргументом этого метода является имя выполняемого запроса. Если для сохранения имен запросов предусмотрены переменные, им прежде чем они будут исполь­зованы, должны быть присвоены эти имена.

StDocName = “Число студентов в группах”

StDocName1 = “Обновление ГРУППА_КОЛ”

StDocName2 = “Обнуление ГРУППА_КОЛ без подчиненных в СТУДЕНТ”

DoCmd.SetWarnings False

DoCmd.OpenQuery (stDocName)

DoCmd.OpenQuery (stDocNamel)

DoCmd.OpenQuery (stDocName2)

DoCmd.SetWarnings True

9. Метод SetWarnings с аргументом False позволяет отключить вывод стандартных предупреждений на экран во время выполнения запросов. После выполнения запросов этот режим восстанавливается.

10. Закройте окно редактора VBA и возвратитесь в Access, выполнив команду File | Close and Return to Microsoft Access.

11. Откройте форму Студент или выполните ее открытие через любую другую форму, например, как в предыдущем упражнении. Добавьте или удалите несколько записей о студентах. Откройте таблицу Группа и убедитесь, что ваша процедура работает.

12. Измените инструкцию DoCmd, заменив в ней имена переменных на имена запросов. Удалите из инструкции описания переменные StDocName, StDocName1 и StDocName2 и инструкции присваивания им значений. Убедитесь, что и в этом случае процедура работает правильно.

В окончательном виде процедура может иметь вид, представленный ниже:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]