В этом упражнении вы напишете небольшую VBA-программу и свяжете ее с событием После обновления (After Update)в поле Фамилия формы Клиенты. Если изменить содержимое поля и попытаться перейти к другому элементу формы, генерируется событие Перед обновлением (Before Update). Access реагирует на это событие, обновляя запись в исходной таблице, после чего генерируется событие После обновления (After Update), обработкой которого вы и займетесь. Это упражнение не является глубоким погружением в Visual Basic, но дает представление о его возможностях. В качестве рабочей папки будет использоваться Office XP SBS\Access\Chap11\Events. Выполните следующие шаги.
1. Откройте базу данных GardenCo, расположенную в рабочей папке.
2. На панели объектов выделите Формы (Forms), в списке форм щелкните на Клиенты, а затем щелкните на кнопке Конструктор (Design).
3. Щелкните на поле Фамилия, чтобы выделить его, и откройте диалоговое окно Свойства (Properties), нажав на клавишу (F4).
4. Щелкните на вкладке Событие (Event), чтобы отoбразить следующий список.
На вкладке представлены события, на которые может реагировать элемент управления Фамилия.
5. Щелкните на событии После обновления (After Update), а затем щелкните на кнопке построителя :. Появится диалоговое окно Построитель (Choose Builder), в котором предлагается построить выражение, макрос или программу.
6. Щелкните на Программы (Code Builder)и щелкните на кнопке ОК, чтобы открыть окно редактора Visual Basic, показанное ниже.
На панели Проект (Project Explorer)перечислены все созданные вами объекты, с которыми можно связать программу. В данном случае это форма Клиенты. По мере создания других форм и отчетов на панели будут появляться соответствующие объекты.
В окне программы отображается процедура Private Sub Фамилия_AfterUpdate,которая будет использоваться для обработки события После обновления (After Update)в поле Фамилия. На данном этапе она состоит только из двух утверждений, определяющих ее начало (Sub)и конец (End Sub).
7. Введите следующие строки между операторами Subи End Sub (или скопируйте их из файла AftUpdateв папке Office XP SBS\Access\Chap11\Events ).
8. 'Создайте переменные для Имени, Фамилии
9. 'и Кода клиента
10. Dim fName As String
11. Dim lName As String
12. Dim cID As String
13. 'Присвойте значения переменной lName из текстового
14. 'поля Фамилия.
15. lName = Forms!клиенты!Фамилия.Text
16. 'Вы должны активизировать текстовое поле прежде,
17. 'чем прочитать его содержание.
18. Forms!клиенты!Имя.SetFocus
19. fName = Forms!клиенты!Имя.Text
20. 'Объедините части Фамилии и Имени
21. 'для создания Кода клиента.
22. cID = UCase(Left(lName, 3) & Left(fName, 2))
23. 'Не храните Код, если только это не 5 знаков.
24. '(Это означает, что оба имени заполнены.)
25. If Len(cID) = 5 Then
26. Forms!клиенты!КодКлиента.SetFocus
27. 'Не изменяйте Код, если он уже был введен.
28. 'Возможно, это было сделано вручную.
29. If Forms!клиенты!КодКлиента.Text = "" Then
30. Forms!клиенты!КодКлиента = cID
31. End If
32. End If
33. 'Активизировать поле ввода Адреса.
Forms!клиенты!Адрес.SetFocus
Важно. Строки, начинающиеся с кавычки, являются комментариями (пояснениями) к следующему за ними фрагменту программы. В редакторе Visual Basic комментарии отображаются зеленым цветом.
34. Сохраните файл, щелкните на кнопке View Microsoft Access, чтобы вернуться в окно Access, и закройте окно Свойства (Properties).
35. В режиме формы, если нужно, измените размер окна. Затем на панели перехода щелкните на кнопке Новая запись (New Record), чтобы создать новую запись.
36. Нажмите на клавишу (Tab), чтобы переместить курсор в поле Имя, введите Джим, нажмите на клавишу (Tab), чтобы перейти в поле Фамилия, введите Патерсон и снова нажмите на клавишу (Tab). Если вы не сделали ошибки при вводе VBA-программы, в поле КодКлиента появится значение ПАТДЖ.
37. Измените имя или фамилию клиента. Обратите внимание, что значение в поле КодКлиента не меняется даже при изменении имен, на основании которых оно образовано.
38. Нажмите на клавишу (Esc), чтобы очистить поля, и попытайтесь вначале ввести фамилию, а потом имя. Значение КодКлиента не будет сформировано, поскольку подобная ситуация не предусмотрена в VBA-программе. Чтобы обеспечить создание кода клиента независимо от последовательности заполнения полей формы, нужно написать аналогичную процедуру для поля Имя или написать одну процедуру, обрабатывающую событие После обновления (After Update)для обоих полей. Такая процедура содержится в базе данных, которая используется в следующем упражнении, и при желании ее можно просмотреть.
39. Нажмите на клавишу (Esc), чтобы очистить поля, а затем закройте форму Клиенты и базу данных.
40. Нажмите на клавиши (Alt) + (Tab), чтобы переключиться в редактор VBA, и закройте его.