
- •Назначение и содержание этапа разработки приложения
- •1. Изучение предметной области бд и требований пользователей
- •2. Создание
- •3. Нормализация
- •4. Физическое
- •5. Разработка приложения бд
- •Виды форм
- •Создание форм
- •Обработка событий формы
- •Обработка событий в формах с помощью макросов
- •Разработка командного интерфейса бд
- •Установка параметров запуска приложения бд
Обработка событий формы
Формы, таблицы, запросы, отчеты и их элементы представляют собой объекты Access. Каждый объект имеет свои свойства, методы и события. Событие – это условие (триггер), которое запускает соответствующую процедуру VBA или макрос обработки события. Это означает, что при работе приложения, в частности, формы возникают события, например, такие, как открытие/ закрытие формы, нажатие кнопки мыши или клавиши, двойное нажатие кнопки, интервал времени таймера, обновление данных поля и др. В ответ, как реакции на события, запускаются нужные процедуры VBA или макросы.
Всевозможных событий у разных объектов формы очень много. Условно их можно разделить на 3 категории:
События отдельных управляющих элементов (controls) формы. Они возникают при действиях пользователя с кнопками, полями, списками и могут запускать соответствующий макрос или процедуру VBA.
События разделов формы.
События формы, такие, как открытие/закрытие формы, переход к следующей записи и др.
Для просмотра всех событий определенного объекта формы нужно выделить этот объект в окне Конструктора и обратиться к вкладке События окна Свойств. Например, у объекта «Форма» около 60 различных событий, у объекта «Кнопка» -12 событий. Полный список всех событий конкретного объекта формы при его выделении мышью выводится на вкладке События (Events) диалогового окна Свойств. Справку по конкретному событию можно получить по клавише F1, предварительно установив курсор в строку нужного события.
Процедуры обработки событий являются основой программирования пользовательского интерфейса. Наиболее часто используются события клавиатуры и мыши.
У мыши имеется обширный набор событий, а именно: Click (Нажатие кнопки), DblClick (Двойное нажатие кнопки), MouseMove (Перемещение указателя), MouseDown (Нажатие кнопки вниз), MouseUp (Отпускание кнопки), Колесико мыши и др. Чаще других используется событие Click. Рассмотрим примеры обработки события Click с помощью процедур VBA в форме «Оформление заказов» учебной БД «Деятельность фирмы».
Форма «Оформление заказов» предназначена для ввода заказов клиентов. Соответственно с помощью раскрывающихся полей со списками пользователь может выбрать из списков название организации и менеджера заказа, в обычные поля ввести дату заказа и дату исполнения. В список заказа формы нужно внести наименования товаров и заказываемое количество. Для упрощения действий пользователя для этого предусмотрен список наименований товара, при раскрытии которого выбирается товар, и поле для ввода количества. Далее нажимается кнопка «Добавить в заказ», и эти данные переносятся в список заказа. При необходимости можно удалить выделенный элемент заказа из списка нажатием кнопки «Удалить из заказа». После оформления списка нажатием кнопки «Принять заказ» заканчивается оформление заказа.
Вид формы
Основную роль в интерфейсе этой формы играют события нажатия соответствующих кнопок. Ниже приведены разработанные для этого процедуры обработки событий на языке VBA, обеспечивающие необходимую функциональность. Эти процедуры могут служить прототипами при разработке интерфейса пользователя к темам курсовых работ. Для понимания кода этих процедур достаточно сведений в объеме Приложений 1, 4 к лабораторной работе №1.
Private Sub Кнопка22_Click() ' Процедура формирования списка заказа Dim strName As String, intCount As Integer, i As Integer Dim flag As Boolea ' Перевод элементов заказа в переменные Me.controlНовыйТоварИмя.SetFocus strName = Me.controlНовыйТоварИмя.Text Me.controlНовыйТоварКоличество.SetFocus intCount = Me.controlНовыйТоварКоличество.Text ' Есть ли уже такой товар в списке? For i = 0 To Me.controlЗаказы.ListCount – 1 If strName = Me.controlЗаказы.Column(0, i) Then MsgBox "Товар уже имеется в заказе!" Exit Sub End If Next i ' Добавление товара в список заказа Me.controlЗаказы.AddItem strName & ";" & intCount End Sub
Private Sub Кнопка23_Click() If Me.controlЗаказы.ItemsSelected.Count = 0 Then MsgBox "Выберите товар в заказе!" Exit Sub End If Me.controlЗаказы.RemoveItem (Me.controlЗаказы.ItemsSelected.Item(0) End Sub
Private Sub ПринятьЗаказ_Click() ' Процедура добавления данных из формы в таблицы БД Dim db As Database, strFirm As String, dateData1 As Date, _ dateDate2 As Date, strManager As String, Code As Integer, _ intCount As Integer, strName As String, f As Boolean, _ intCodeItem As Integer, IntCodeZakaz As Integer Dim command As CommandButton Dim rs As Recordset, rs1 As Recordset, _ str1 As String, i As Integer, rsItem As Recordset ' занесение данных из формы в переменные Me.controlДатаЗаказа.SetFocus dateDate1 = Me.controlДатаЗаказа.Text Me.controlДатаИсполнения.SetFocus dateDate2 = Me.controlДатаИсполнения.Text Me.controlОрганизация.SetFocus Code = Me.controlОрганизация.Column(0) strFirm = Me.controlОрганизация.Column(1) Me.controlМенеджер.SetFocus strManager = Me.controlМенеджер.Text 'Добавление заказа Set db = CurrentDb Set rs = db.OpenRecordset("ЗаказыОрганизаций", dbOpenDynaset) rs.AddNew rs!КодЗаказчика = Code rs!Менеджер = strManager rs!ДатаЗаказа = dateDate1 rs!ДатаИсполнения = dateDate2 IntCodeZakaz = rs!КодЗаказа rs.Update Set rsItem = db.OpenRecordset("Товары", dbOpenDynaset) ' Добавление заказанных товаров Set rs1 = db.OpenRecordset("ЗаказанныеТовары", dbOpenDynaset For i = 0 To Me.controlЗаказы.ListCount – 1 rsItem.FindFirst "Наименование = '" & Me.controlЗаказы.Column(0, i) & "'" rs1.AddNew rs1!КодЗаказа = IntCodeZakaz rs1!КодТовара = rsItem!КодТовара rs1!Количество = Me.controlЗаказы.Column(1, i) rs1.Update Next i rs.Close rs1.Close rsItem.Close Set rsItem = Nothing Set rs1 = Nothing Set rs = Nothing End Sub
Private Sub Закрыть_Click() ' Процедура закрытия формы On Error GoTo Err_Закрыть_Click DoCmd.Close Exit_Закрыть_Click: Exit Sub Err_Закрыть_Click: MsgBox Err.Description Resume Exit_Закрыть_Click End Sub