Самоучитель VBA

       

Пример приложения



Рассмотрим работу с базой данных на примере следующего простого приложения, в котором используются все основные операции с записями. База данных находится в файле студенты.mdb, созданным в Access, и состоит из одной таблицы ПервыйКурс. В таблице имеются четыре поля: Фамилия, Группа, предмет и Оценка. При запуске приложения на экране отображается диалоговое окно Студенты первого курса.

Рис. 15.11. Диалоговое окно Студенты первого курса

Приводимая ниже программа:

  • При активизации диалогового окна выводит в поля ввода информацию о первом студенте и в надписи всего записей указывает общее число записей в таблице.

  • При нажатии кнопок > и < происходит перемещение на одну запись вперед и назад соответственно, а при нажатии кнопок >> и << — перемещение в конец и начало таблицы соответственно.

    При нажатии кнопки найти происходит поиск первой записи из таблицы с указанной фамилией (если такой записи нет, то при помощи свойства Bookmark указатель возвращается в ту же позицию, откуда начался поиск). При нажатии кнопки найти далее ищется последующая запись с той же фамилией.

  • При нажатии кнопки Удалить удаляется запись.

  • При нажатии кнопки новая запись создается новая запись по данным, введенным в поля ввода.

  • При нажатии кнопки Редактировать вносятся изменения в запись из базы данных.

  • При нажатии кнопки Закрыть закрываются база данных и диалоговое окно.



  • При выборе переключателя хорошисты и отличники в диалоговом окне выводятся данные только о хорошистах и отличниках, а при выборе переключателя все — выводится информация обо всех студентах.

    '

    ' Переменные уровня модуля

    '

    Dim РабочаяОбласть As Workspace

    Dim БазаДанных As Database

    Dim Запись As Recordset

    Dim ЗаписьДубль As Recordset

    Dim Фамилия As String

    Dim Критерий As String

    Dim Закладка As Variant

    '

    Private Sub CommandButton1_Click()

    '

    ' Найти запись по фамилии

    '

    ' Запоминается на закладке текущая запись

    Закладка = Запись.Bookmark

    '

    ' Считывается фамилия из поля Фамилия, на ее основе


    ' создается критерий поиска и ищется первая запись с

    ' подобной фамилией '

    Фамилия = Trim(TextBoxl.Text)

    Критерий = "[Фамилия]="' & Фамилия & "'"

    Запись.FindFirst Критерий

    ' Если запись с указанной фамилией найдена, то она отображается

    ' в диалоговом окне.

    ' Если запись не найдена, то отображается сообщение и

    ' при помощи закладки происходит возврат к записи, с которой

    ' был начат поиск
    '

    If Запись.NoMatch = False Then

    ПоказатьЗапись Else

    MsgBox "Запись не найдена", vblnformation, "Студенты"

    Запись.Bookmark = Закладка

    ПоказатьЗапись End If

    End Sub

    Private Sub CommandButtonlO_Click()
    '

    ' Переход к последней записи

    '
    '

    Запись.MoveLast ПоказатьЗапись

    End Sub
    '

    Private Sub CommandButton2_Click()

    ' Найти следующую запись по фамилии
    '

    Закладка = Запись.Bookmark

    Фамилия = Trim(TextBoxl.Text)

    Критерий = "[Фамилия]='" & Фамилия & "'"

    Запись.FindNext Критерий

    If Запись.NoMatch = False Then

    Показать Запись Else

    MsgBox "Больше таких записей нет", vblnformation, "Студенты"

    Запись.Bookmark = Закладка

    Показать Запись
    End If
    End Sub

    Private Sub CommandButton3_Click()
    '

    ' Удаление записи
    '

    With Запись

    .Delete

    .MoveNext End With ПоказатьЗапись

    End Sub
    '

    Private Sub CommandButton4_Click()
    '

    ' Добавление записи
    '

    With Запись .AddNew

    .Fields("Фамилия").Value = TextBoxl.Text
    .Fields("Группа").Value = TextBox2.Text
    .Fields("Предмет").Value = TextBox3.Text
    .Fields("Оценка").Value = TextBox4.Text .Update

    End With

    '

    Exit Sub
    '

    End Sub

    Private Sub CommandButton5_Click()
    '

    ' Редактирование записи
    '

    With Запись .Edit

    .Fields("Фамилия").Value = TextBoxl.Text
    .Fields("Группа").Value = TextBox2.Text
    .Fields("Предмет").Value = TextBox3.Text
    .Fields("Оценка").Value = TextBox4.Text

    .Update End With End Sub


    Private Sub CommandButton6_Click()
    '

    ' Закрытие записи, базы данных и окна
    '

    Запись.Close
    БазаДанных.Close
    РабочаяОбласть.Close
    UserForml.Hide

    End Sub

    Private Sub CommandButton7_Click()

    ' Переход к первой записи
    'Запись.MoveFirst Показать Запись
    End Sub

    Private Sub CommandButton8_Click()
    '

    ' Переход к предыдущей записи

    'Запись.MovePrevious
    '

    ' Если достигнута первая запись, то отображается сообщение
    '

    If Запись.BOF = True Then

    Запись.MoveFirst

    MsgBox "Первая запись", vblnformation, "Студенты"
    End If
    'ПоказатьЗапись

    End Sub
    '

    Private Sub CommandButton9_Click()

    ' Переход к последующей записи
    '

    Запись.MoveNext

    ' Если достигнута последняя запись, то отображается сообщение
    '

    If Запись.EOF = True Then

    Запись.MoveLast

    MsgBox "Последняя запись", vblnformation, "Студенты"
    End If
    ПоказатьЗапись

    End Sub
    '

    Private Sub OptionButtonl_Click()
    '

    ' Отображение данных только о хорошистах и отличниках
    '

    ' Создание копии записи
    '

    Set ЗаписьДубль = Запись.Clone
    '

    ' Фильтрация записей по критерию
    '

    Запись.Filter = "[Оценка] >= 4"
    '

    ' Создание отфильтрованной записи
    '

    Set Запись= Запись.OpenRecordset()

    If Запись.RecordCount > 0 Then
    '

    ' Если отфильтрованная запись существует, то она отображается
    ' в диалоговом окне

    'ПоказатьЗапись

    Else
    '

    ' Если отфильтрованной записи нет, то отображается соответствующее
    ' сообщение, восстанавливается первоначальный объект Recordset
    ' и выбирается переключатель Все

    '

    MsgBox "Таких студентов нет", vblnformation, "Студенты"

    Set- Запись = ЗаписьДубль.Clone

    Set Запись = Запись.OpenRecordset()

    OptionButton2.Value = True
    End If
    End Sub

    Private Sub OptionButton2_Click()
    '

    ' Отображение всех студентов
    '

    Set ЗаписьДубль = Запись.Clone

    Set Запись = ЗаписьДубль.OpenRecordset()

    ЗаписьДубль.Close

    ПоказатьЗапись

    End Sub

    '

    Private Sub UserForm_Initialize()
    '

    ' Создание рабочей области


    '

    Set РабочаяОбласть = CreateWorkspace(Name:="", UserName:="admin",

    Password:="", UseType:=dbUseJet)
    '

    ' Открытие базы данных студенты.mdb

    Set БазаДанных = _

    РабочаяОбласть.OpenDatabase
    (Name:="C:\MY_DOC\студенты.mdb",

    Options:=True)

    '

    '

    ' Создание записей
    '

    Set Запись = БазаДанных.OpenRecordset("ПервыйКурс",dbOpenDynaset)
    '

    ' Принудительное перемещение на последнюю запись для того,
    ' чтобы определить число записей Запись.MoveLast
    '

    ' Вывод числа записей в надписи Номер записи из
    '

    '

    Labels.Caption = "Всего записей " & CStr(Запись.RecordCount)
    '

    ' Принудительное перемещение на первую запись
    'Запись.MoveFirst
    '

    ' Вывод первой записи в поля диалогового окна

    '

    ПоказатьЗапись With UserForm1

    .Caption = "Студенты первого курса"

    .OptionButton2.Value = True End With

    End Sub

    '

    Sub ПоказатьЗапись()

    '

    ' Процедура вывода записи в поля диалогового окна
    '

    TextBoxl.Text = Запись.Fields("Фамилия").Value
    TextBox2.Text = Запись.Fields("Группа").Value
    TextBox3 .Text = Запись.Fields ("Предмет.").Value
    TextBox4.Text = Запись.Fields("Оценка").Value

    '

    End Sub

    Содержание раздела