Пример приложения
Рассмотрим работу с базой данных на примере следующего простого приложения, в котором используются все основные операции с записями. База данных находится в файле студенты.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