Программирование в ACCESS 2000, страница 21

Как и в модели ОАО, перед вызовом метода 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, который переводит запись в состояние изменения.