Иллюстрированный самоучитель по Microsoft Access 2002

Использование функций для обработки событий

Обычно для обработки событий в формах и отчетах используют процедуры типа Sub (подпрограммы) или макросы. Однако иногда можно и даже нужно использовать функции. Дело в том, что если в рамках одной формы делается множество однотипных задач, то лучше создать одну процедуру – функцию для выполнения этих задач, описать ее на уровне модуля формы, т. е. в разделе General, а потом вызывать из любого места в форме. Если это необходимо, для такой функции определяется один или несколько параметров, которые передаются при вызове данной функции. И хотя значение, возвращаемое функцией, не используется (а обычно и не определяется), применение ее оправдано не только потому, что требуется писать меньше строк кода, а главным образом потому, что минимизация кода в модуле формы ускоряет ее открытие.

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

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

Допустим, вы отображаете в форме список каких-либо объектов, например счетов клиента. Обычно это делается в подчиненной форме табличного или ленточного вида, в которой отображаются наиболее важные характеристики счета: номер счета, дата выписки, наименование клиента, сумма. И вы хотите дать возможность пользователю при желании посмотреть тот счет, который он выбрал, установив курсор на соответствующую строчку. Это можно сделать, создав процедуру открытия формы счета с нужной записью при двойном щелчке мыши на строчке счета. Естественно, что форма должна открываться при щелчке в любом поле подчиненной формы. Вместо того чтобы в каждом поле подчиненной формы на событие Двойное нажатие (DblClick) создавать процедуру обработки событий, можно создать одну функцию и присоединить ее ко всем полям. Функция будет выглядеть так:

Private Function Order_DblClick()
Dim strCriteria As String
On Error Goto Err Order DblClick
strCriteria = "КодЗаказа = Forms![Заказы клиента]!_ [Заказы клиента подчиненная].form!КодЗаказа"
DoCmd.OpenForm "Заказы", acNormal, , strCriteria
Exit_Order_DblClick: Exit Function
Err_Order_DblClick: ;
MsgBox Err.Description
Resume
Exit_Order_DblClick
End Function

А присоединить эту функцию к событию элемента управления формы можно так, как показано на рис. 13.36. Мы сделали это для формы "Заказы клиента" (Customer Orders) приложения (NorthWind).

Иллюстрированный самоучитель по Microsoft Access 2002 › Программирование в Access 2002 › Использование функций для обработки событий
Рис. 13.36. Использование функции при обработке событий в форме

Еще один пример применения функции для обработки событий в форме вы может увидеть в базе данных "Контакты" (Contacts) (см. пример к гл. 18) В этом приложении с помощью Мастера кнопочных форм создана главная кнопочная форма, которая открывается при открытии приложения. На форме имеются несколько кнопок, каждая из которых выполняет определенную функцию, но обрабатываются они все одинаково. Для этого мастер создает функцию =HandleButtonClick которая имеет один аргумент – идентификатор нажатой кнопки. Вызов функции выполняется, как показано на рис. 13.37. Аргумент определяет нажатую клавишу. Он обрабатывается программой в блоке Select Case, после чего выполняется соответствующее действие.

Иллюстрированный самоучитель по Microsoft Access 2002 › Программирование в Access 2002 › Использование функций для обработки событий
Рис. 13.37. Вызов функции для обработки события Нажатие кнопки

Выводы

В данной главе были приведены основные сведения, необходимые для программирования приложений в Access 2002, и мы рассмотрели несколько примеров использования процедур обработки событий в формах. Овладев основным инструментарием и получив необходимые навыки, вы сможете сами создавать процедуры обработки событий в приложениях Access. Дальнейшие главы расширят ваше представление о возможностях языка VBA при интеграции приложений Access с другими компонентами семейства Microsoft Office, а также при создании сложных многопользовательских и клиент-серверных приложений.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.