A. Создание формы
Создание форм в базе данных Access сложный и трудный этап программирования. По их внешнему виду и определяют квалификацию программиста как специалиста.
Давайте и мы напишем общую функцию, которая будет сама создавать нам форму и изменит ее настройки так, чтобы она выглядела красиво и с минимальным количеством объектов управления. Имя формы будет «Мой калькулятор» и запишем ее в переменную strForm.
B. Удаление формы
На этом этапе напишем программу для удаления формы strForm («Мой калькулятор»). Программа работает так, что если формы нет в базе данных, то программа выходит по ошибке через метку 999 и нам надо очистить поток от нее, чтобы в дальнейшем не было сообщений.
C. Создание элементов формы
Теперь нам надо написать программу, которая создаст управляющие элементы, т.е. метки, кнопки и список формы, восстанавливая их из таблицы базы данных, например, «Калькулятор-форма». Этот метод необходимо изучить потому, что таким образом можно легко восстановить любой шаблон формы и в дальнейшем модифицировать его.
D. Вставить в форму модуль
После создания формы, напишем программу, которая вставит «модуль программ» на Бэйсике в нашу форму. Это необходимо для того, чтобы обеспечить обработку событий формы, например, таких как открытие, загрузка, нажатие кнопок.
Далее в лекциях идет перечисление событий. Они отмечены на рисунках кнопкой.
E. Открытие формы
Обработка события. Данная функция начинает работать при открытии формы. В ней мы размещаем информацию о предварительных настройках окна калькулятора, до его отображения на экране.
F. Расчет выражения
Обработка события. Эта программа нужна для того, чтобы после того, как пользователь введет свое выражение и нажмет кнопку «Enter», произошли необходимые расчеты, и список вычислений калькулятора обновился.
H. Открыть отчет
Обработка события. После проведенных вычислений нам может потребоваться отпечатать отчет. Для этого мы и создали кнопку Печать. Теперь мы должны написать событие, чтобы при нажатии кнопки отобразился документ "Отчет об итогах".
I. Расcчитать данные
Обработка событий. В нашем калькуляторе есть кнопка Расчет, вставим в программу событие, которое при нажатии данной кнопки будет проводить вычисление введенного в калькулятор выражения.
J. Сохранить выражение
Если мы хотим печатать данные о вычислениях, то надо уметь сохранять итоги расчетов калькулятора в таблице. Напишем функцию, которая будет это делать.
K. Сбросить все вычисления
Обработка событий. И так при работе за калькулятором, Вам может потребоваться сбросить все вычисления, для этого напишем событие, которое будет срабатывать при нажатии кнопки Сброс.
L. Проверка знаний
Теперь Вы научились создавать формы в Access и можете себя считать в какой-то степени профессионалом. Для просмотра Вашей работы нажмите кнопку [Проверка N6], для продолжения учебы, нажмите кнопку Вперед>
Внимание! Открыв форму калькулятора в режиме просмотра, у Вас не будет работать кнопка Отчет, т.к. Вы еще не прослушали раздел лекций по разработке отчетов.
08.06.2000 Виктор Конюков, mailto:LiderAccess@bigfoot.com
Private Sub Form_Open(Cancel As Integer)
subBarOff 'Выключить все меню и строку состояния
'Настроить всплывающие подсказки кнопок
Me.кнВыход.ControlTipText = "Выход из программы"
Me.кнПечать.ControlTipText = "Печать отчета о расчетах"
Me.кнРасчет.ControlTipText = "Расчет данных на калькуляторе"
Me.кнСброс.ControlTipText = "Сбросить все вычисления"
'Меняем настройки окна, установленные по умолчанию
Me.Caption = "Мой калькулятор" 'Заголовок
Me.ScrollBars = 0 'Полосы прокрутки
Me.RecordSelectors = False 'Область выделения
Me.NavigationButtons = False 'Кнопки перехода
Me.DividingLines = False 'Разделительные линии
'Меняем настройки списка задач
Me.Список.BackColor = 8421376 'Цвет фона символов
Me.Список.ForeColor = RGB(255, 255, 255) 'Цвет символов
'Устанавливаем события
Me.Выражение.AfterUpdate = "[Event Procedure]" 'После обновления
Me.кнВыход.OnClick = "[Event Procedure]" 'Нажатие кнопки
Me.кнПечать.OnClick = "[Event Procedure]" 'Нажатие кнопки
Me.кнРасчет.OnClick = "[Event Procedure]" 'Нажатие кнопки
Me.кнСброс.OnClick = "[Event Procedure]" 'Нажатие кнопки
'Настраиваем параметры приложения
DoCmd.RunCommand acCmdAppMaximize ‘Увеличиваем приложение
On Error Resume Next ‘Отключаем диагностику ошибок меню
Me.MenuBar = "Калькулятор" ‘Устанавливаем меню
Err.Clear ‘Очищаем поток от ошибки
Private Sub кнПечать_Click()
On Error Resume Next 'Отключаем диагностику ошибок
DoCmd.OpenReport "Отчет об итогах", acViewPreview 'Открываем отчет
Err.Clear 'В случае отсутствия данных очищаем поток ошибок
Private Sub кнРасчет_Click()
If (Me.Выражение = "") Or IsNull(Me.Выражение) Then 'Проверяем выражение
MsgBox "Введите выражение!", _
vbInformation, Me.Name 'Сообщаем об отсутствии данных
Else
Выражение_AfterUpdate 'Обновляем выражение
End If
Private Sub кнСброс_Click()
Dim dbs As Database
On Error GoTo 999 'Назначаем переход по ошибке
Set dbs = CurrentDb 'Выбираем базу данных
dbs.Execute "DELETE * FROM [Калькулятор]", dbFailOnError 'Удаляем расчеты
Me.Итог = "" 'Удаляем итог
Me.Выражение = "" 'Очищаем выражение
Me.Список.Requery 'Обновляем список
Exit Sub 'Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Private Sub subСохранитьВыражение()
Dim dbs As Database, rst As Recordset
On Error GoTo 999 'Назначаем переход по ошибке
Set dbs = CurrentDb 'Выбираем базу данных
Set rst = dbs.OpenRecordset("SELECT * FROM [Калькулятор]")
With rst
If .RecordCount > 0 Then
.MoveLast '! Заполнить запрос SQL данными
End If
.AddNew 'Добавить новую запись
!Пункт = .RecordCount + 1 'Порядковый номер записи
!Выражение = Me.Выражение 'Вычисляемое выражение
!Итог = Me.Итог 'Итоговое вычисление
.Update '! Запомнить вычисления
End With
rst.Close 'Закрываем запрос
Set dbs = Nothing 'Уничтожаем переменную
Exit Sub 'Выходим из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Private Sub Выражение_AfterUpdate()
Dim dbs As Database
On Error GoTo 999 'Назначаем переход по ошибке
If (Me.Выражение = "") Or _
IsNull(Me.Выражение) Then Exit Sub 'Проверяем выражение
Set dbs = CurrentDb 'Выбираем базу данных
Me.Итог = Eval(Me.Выражение) 'Рассчитываем выражение
subСохранитьВыражение 'Сохраняем выражение в списке
Me.Список.Requery 'Пересматриваем список
Me.Выражение = "" 'Сбрасываем выражение
Me.кнПечать.SetFocus 'Помещаем курсор для печати
Set dbs = Nothing 'Обнуляем переменную
Exit Sub 'Выходим из программы
999:
Err.Clear 'Очищаем поток от ошибок
Me.Итог = "Ошибка" 'Сообщаем об ошибке
Me.Выражение.SetFocus 'Подготавливаем новый ввод данных
Public Function funCreateForm(strForm As String) As Boolean
Dim frm As Form
On Error GoTo 999 'Переход по ошибке
funCreateForm = False 'Значение возвращаемое по ошибке
funDeleteForm strForm 'Удаляем старую форму
Set frm = appAccess.CreateForm 'Создаем новую форму
With frm 'Изменяем параметры формы
.Caption = "Мой калькулятор" 'Вставляем заголовок
.ScrollBars = 0 'Гасим полосы прокрутки
.RecordSelectors = False 'Гасим область выделения
.NavigationButtons = False 'Гасим кнопки перехода
.DividingLines = False 'Гасим разделительные линии
.AutoCenter = True 'Выравниваем форму по центру
.BorderStyle = 3 'Устанавливаем диалоговую границу
.Section(0).Height = 3.862 * appCM 'Изменяем высоту окна
.Width = 10.926 * appCM 'Изменяем ширину окна
.HasModule = True 'Разрешаем программы в форме
End With
funRestoreFormControls frm 'Создаем элементы формы
funInsertFormModule frm 'Создаем модуль формы
appAccess.DoCmd.Save , strForm 'Сохраняем форму
appAccess.DoCmd.Close acForm, strForm, acSaveYes 'Закрываем форму
funCreateForm = True 'Возвращаем результат
Exit Function 'Выход из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Public Function funDeleteForm(strForm As String) As Boolean
Dim frm As Form
On Error GoTo 999 'Переход по ошибке
funDeleteForm = False 'Возвращаемое значение при ошибке
appAccess.DoCmd.DeleteObject acForm, strForm 'Удаляем форму
funDeleteForm = True 'Возвращаем значение
Exit Function
999:
Err.Clear 'Очищаем поток от ошибок
Public Function funInsertFormModule(frm As Form) As Boolean
Dim s As String, mdl As Module
On Error GoTo 999 'Переход по ошибке
s = appFolder & "\Программы\Form_Мой калькулятор.bas"
If Dir(s) <> "" Then 'Проверяем файл
frm.Module.AddFromFile s 'Добавляем модуль
End If
Exit Function 'Выходи из программы
999:
MsgBox Err.Description 'Сообщаем об ошибке
Err.Clear 'Очищаем поток от ошибок
Public Function funRestoreFormControls(frm As Form) As Boolean
Dim ctl As Control, rst As Recordset, dbs As Database, i As Integer
On Error GoTo 999 'Переход по ошибке
funRestoreFormControls = False 'Возврат значения по ошибке
Set dbs = CurrentDb 'Выбираем текущую базу данных
Set rst = dbs.OpenRecordset("SELECT * FROM [Калькулятор-форма]")
If rst.RecordCount = 0 Then 'Проверяем запрос
rst.Close 'Закрываем запрос
Exit Function 'Выходим из программы
End If
With rst 'Создание элемента из запроса
.MoveLast 'Заполняем запрос данными
.MoveFirst 'Переходим на 1 запись
For i = 0 To .RecordCount - 1 'Выполняем восстановление для каждой записи
Select Case rst!ControlType
Case acCommandButton 'Создаем Кнопку
Set ctl = appAccess.CreateControl(frm.Name, rst!ControlType, , "", "", rst!Left, rst!Top, rst!Width, rst!Height)
ctl.OnClick = "[Event Procedure]" 'Включаем обработку нажатия
ctl.Caption = rst!Caption 'Меняем название
ctl.ControlTipText = rst!ControlTipText 'Устанавливаем подсказку
Case acLabel 'Создаем Надпись
Set ctl = appAccess.CreateControl(frm.Name, rst!ControlType, , "", rst!Caption, rst!Left, rst!Top, rst!Width, rst!Height)
ctl.BackColor = !BackColor 'Меняем фон
Case acTextBox 'Создаем Поле
Set ctl = appAccess.CreateControl(frm.Name, rst!ControlType, , "", "", rst!Left, rst!Top, rst!Width, rst!Height)
ctl.SpecialEffect = 0 'Выбираем стандартное выделение
ctl.BorderColor = 0 'Выбираем черный цвет
ctl.BorderStyle = 1 'Выбираем обычную границу
Case acListBox 'Создаем Список
Set ctl = appAccess.CreateControl(frm.Name, rst!ControlType, , "", "", rst!Left, rst!Top, rst!Width, rst!Height)