Создание баз данных, таблиц, работа с таблицами в среде СУБД MSAccess: Методические рекомендации по выполнению лабораторной работы, страница 5

'Добавление индекса в семейство Indexes объекта TableDef

    .Indexes.Append idx

End With

db.Close

End Sub

            Приложение 3.  Поиск  записей

При поиске нужных записей для объектов типа Recordset может использоваться группа методов Find и метод Seek. Метод Seek является более быстрым, так как основан на применении индексов таблиц.

В объектной модели DAO имеется четыре метода, относящиеся к группе Find:

FindFirst – определяется первая запись, удовлетворяющая условиям поиска,

FindLast - определяется последняя запись, удовлетворяющая условиям поиска,

FindNext – определяется следующая запись, удовлетворяющая условиям поиска,

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

Составил   доц.  Щетинин Ю.И.