Лекции по Microsoft Access 2000

         

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)