Как и в модели ОАО, перед вызовом метода Seek нужно указать, какой индекс будет использоваться при поиске. Это должно быть имя объекта из семейства Indexes таблицы, в которой ведется поиск. При желании использовать при поиске первичный ключ нужно указать его имя. Это имя по умолчанию PrimaryKey, если вы его не изменили при создании таблицы. Аргумент <KeyValues> может содержать одно или несколько значений. Если выбранный индекс состоит из одного поля, передается одно значение. Если индекс состоит из нескольких полей, можно организовать массив, который будет содержать значения для каждого поля в индексе.
Если в результате поиска запись найдена, она становится текущей в объекте Recordset, если нет, то значение свойства EOF будет равным True.
В листинге 5.36 приводится пример поиска автора в таблице Авторы с помощью метода Seek.
Листинг 5.36. Процедура поиска автора (ADO)
Private Authorld As Long, strTable As String
Private Sub SeekAuthorO
Dim cnn As ADODB.Connection Dim rs As ADODB.Recordset
' открываем соединение с базой данных
Set cnn = New ADODB.Connection
With cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Open "С:\Библиотека.mdb"
End With
Set rs = New ADODB.Recordset
strTable = "Авторы"
With rs
' указываем индекс, который должен использоваться при поиске
.Index = "PrimaryKey"
' открываем таблицу, используя объект Recordset с прямым доступом к таблице .Open Source:= strTable, ActiveConnection:=cnn, _
CursorType:=adOpenKeyset, _
LockType:=adLockOptimistic, _
Options:=adCmdTableDi rect
‘ выполняем поиск сотрудника
.Seek KeyValues:=EmployeeId, SeekOption:=adSeekFirstEQ
‘ если не нашли, выдаем сообщение об ошибке
If .EOFThen
MsgBox "Искомый автор не найден"
Exit Sub
End If
‘ обрабатываем найденную запись ' код обработки
‘ закрываем объект Recordset
.Close
End With
‘ закрываем соединение и освобождаем объектные переменные
cnn.Close
Set rst = Nothing
Set cnn = Nothing
End Sub
Добавлениеновойзаписи
Рассмотрим пример добавления новой записи, используя объекты DAO, а потом опишем, чем отличается выполнение этого метода в объектной модели ADO.
Итак, чтобы добавить новую запись в объект Recordset, нужно:
1. Выполнить метод AddNew, чтобы создать новую пустую запись и сделать ее текущей.
2. Присвоить нужные значения всем (или, по крайней мере, обязательным) полям этой записи.
3. Выполнить метод Update, чтобы сохранить внесенные изменения. При этом указатель текущей записи снова перемещается на ту запись, на которой он был установлен до применения метода AddNew.
В листинге 5.37 приводится пример добавления записи в таблицу Авторы. Чтобы добавление записи выполнялось корректно, должны быть присвоены значения, по крайней мере, всем обязательным полям таблицы. Значения полей берутся из элементов управления формы. 1
Листинг 5.37. Добавление записи в таблицу (ОАО)
'добавление новой записи в таблицу "Авторы"
Set rs = dbCur.OpenRecordset("Авторы", dbOpenDynaset)
rs.AddNew
rs!КодАвтора = txtCode
rs!ФИО = txtName
rs!ГодРождения = intYear
rs.Update
rs.Close
При выполнении аналогичных изменений в объекте Recordset ADO инструкция, вызывающая метод Update, может быть опущена. Разница в поведении объектов Recordset DAO и ADO в данном случае состоит в том, что в модели ОАО при переходе от измененной записи к другой записи набора все изменения теряются, если перед этим не был вызван метод Update. В модели ADO все изменения автоматически сохраняются в базе при переходе к новой записи и без применения этого метода. Если нужно перейти к новой записи, не сохраняя сделанные в записи изменения, следует воспользоваться методом CancelUpdate.
Изменениесуществующейзаписи
Изменение текущей записи в модели ОАО выполняется следующим образов:
1. Вызывается метод Edit, который переводит запись в состояние изменения.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.