'Добавление индекса в семейство Indexes объекта TableDef
.Indexes.Append idx
End With
db.Close
End Sub
Приложение 3. Поиск записей
При поиске нужных записей для объектов типа Recordset может использоваться группа методов Find и метод Seek. Метод Seek является более быстрым, так как основан на применении индексов таблиц.
В объектной модели DAO имеется четыре метода, относящиеся к группе Find:
o FindFirst – определяется первая запись, удовлетворяющая условиям поиска,
o FindLast - определяется последняя запись, удовлетворяющая условиям поиска,
o FindNext – определяется следующая запись, удовлетворяющая условиям поиска,
o FindPrevious - определяется предыдущая запись, удовлетворяющая условиям поиска.
Единственный аргумент каждого из этих методов задает условия поиска.
В листинге 2 приведен пример поиска с помощью метода FindFirst. Условия поиска задаются в окне InputBox, результаты поиска в примере выводятся в окно сообщений Immediate.
Листинг 2.
Function FindChip()
Dim db As Database, rs As DAO.Recordset, i As Integer, idOU As Long
Set db = CurrentDb
Set rs = db.OpenRecordset("Усилители", dbOpenSnapshot)
'ищем первую запись по заданному критерию
idOU = Trim(InputBox("Введите значение коэффициента усиления "))
rs.FindFirst "Коэф_усиления > " & idOU
'если не нашли, то выходим из функции
If rs.NoMatch Then
MsgBox " Такие микросхемы отсутствуют "
Exit Function
Else
Debug.Print " Микросхема " & " " & rs.Fields("Тип") & " " _
& " К-т усиления = " & rs.Fields("Коэф_усиления")
Do Until rs.EOF
rs.FindNext " Коэф_усиления > " & idOU
If rs.NoMatch = False Then
Debug.Print " Микросхема" & " " & rs.Fields("Тип") & " " _
& " К-т усиления = = " & rs.Fields("Коэф_усиления ")
End If
rs.MoveNext
Loop
End If
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Function
Метод Seek обеспечивает быстрый поиск с использованием индекса, который нужно предварительно создать, если такого индекса нет, и установить его в качестве текущего. Он позволяет найти только первую запись, удовлетворяющую условию. Синтаксис метода Seek:
<таблица>.Seek <сравнение> ,<ключ1>, <ключ2>,…
Аргумент <сравнение> представляет собой один из операторов сравнения: =, >, >=, < , <=. В аргументах <ключ> указываются значения, которые необходимо найти.
В листинге 3 представлен пример индексного поиска в таблице «Усилители». Ввод условия поиска выполняется через окно InputBox, вывод результата поиска осуществляется в окно MessageBox.
Листинг 3.
' Пример быстрого (индексного) поиска с помощью
' метода Seek для объектов Recordset
Private Sub SeekMkch()
Dim db As Database, td As TableDef, Gain As Long, rs As Recordset
Set db = CurrentDb
' Создание объекта Recordset
Set rs = db.OpenRecordset("Усилители", dbOpenTable)
' Установка активного индекса, соответствующий индекс должен существовать
rs.Index = "Усиление"
Gain = Trim(InputBox("Введите значение коэффициента усиления"))
rs.Seek ">", Gain
' вывод результата поиска
If rs.NoMatch Then
MsgBox "Такой микросхемы нет!"
Else
MsgBox ("Найден Тип " & rs.Fields("Тип") & " " _
& "Коэффициент усиления = " & rs.Fields("Коэф_усиления "))
' Вариант вывода в окно Immediate , команда меню View | Immediate Window
' Debug.Print "Микросхема" & " " & rs.Fields("Тип") & " " _
' & "К-т усиления = " & rs.Fields("Коэф_усиления ")
End If
rs.Close
db.Close
End Sub
Приложение 4. Добавление, изменение и удаление записей
В модели DAO для изменения текущей записи используется метод Edit объекта Recordset, производятся нужные изменения и затем вызывается метод Update для сохранения изменений. Соответствующий пример приведен в листинге 4.
Листинг 4.
'Изменение записи в таблице "Заказчики"
Sub UpdateRecord()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("Заказчики")
rs.MoveFirst
Do Until rs.EOF
If rs.Название = "Отдел 2" Then
rs.Edit
rs.КонтактноеЛицо = "Киселев М.С."
rs.Update
End If
rs.MoveNext
Loop
rs.Close
End Sub
Добавление новой записи осуществляется с помощью метода AddNew объекта Recordset. Далее присваиваются значения всем или обязательным полям и методом Update сохраняются данные. Пример программы представлен в листинге 5.
Листинг 5.
' Добавление новой записи с помощью метода AddNew
Sub CreateNewRecord()
Dim dbs As Database, rstCustomer As Recordset
' Открытие базы данных
Set dbs = CurrentDb
'Создание переменной типа Recordset (набор записей), представляющей таблицу ‘ "Заказчики"
Set rstCustomer = dbs.OpenRecordset("Заказчики")
' Создание новой записи
rstCustomer.AddNew
' Ввод значений в поля
rstCustomer!Название = "Отдел 4"
rstCustomer!КонтактноеЛицо = "Дмитриев Р.В."
rstCustomer!НомерТелефона = "21-74-68"
' Сохранение новой записи методом Update
rstCustomer.Update
dbs.Close
End Sub
Удаление текущей записи производится методом Delete. Удаляемую запись нужно сделать текущей. Пример:
Листинг 6.
' Пример удаления записи из таблицы "Заказы"
Sub DeleteRecord()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("Заказы")
Do Until rs.EOF
If rs.КодЗаказа = 2 Then
rs.Delete
End If
Loop
End Sub
Составил доц. Щетинин Ю.И.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.