Книга: VBA для чайников
Проверка записей
Проверка записей
Если при создании объекта Recordset с помощью VBA не возникло никаких проблем, вашим первым действием должна быть проверка того, что полученный набор вообще содержит какие-то данные. Если это так, сообщите пользователю о том, что для работы недоступна ни одна запись. Прием заключается в проверке значений свойств BOF (Beginning Of File - Метка начала файла) и EOF (End Of File- конец файла). Если значения обоих свойств равны True, набор записей пуст. Лучший способ организации подобной проверки- использование логического оператора And, который возвращает значение True только в том случае, если оба логических выражения равны True, как показано в приведенном ниже примере:
If rstY.30F and rstY.EOF Then
MsgВох "Записи в этом наборе отсутствуют!"
End If
ADO позволяет вам перемещаться по набору записей достаточно легко. Например, для перемещения к первой записи в наборе используется метод MoveFirst, для перемещения к последней записи в наборе- метод MoveLast, а для перемещения к следующей -1ли предыдущей записи в наборе- метод MoveNext или MovePr evi ous соответственно. Метод Move позволяет вам перемещаться на определенное количество записей в наборе вперед или назад. Например, инструкция rstZ.Move -3 перемещает на три записи назад.
Если вы точно знаете, что захотите вернуться к определенной записи в дальнейшем, создайте для этой записи закладку. При работе с записью присвойте переменной значение свойства Bookmark объекта Recordset, как показано ниже:
varBookmark1 = rstA.Bookmark
После этого вы можете вернуться к этой закладке в дальнейшем, просто обратив инструкции:
rstA.Bookmark = varBookmark1
Метод Seek, а также четыре метода Find ( FindFist, FindLat, FindNext и FindPrevious ) позволяют вам отследить определенную запись, базируясь на ее содержимом. Поскольку метод Seek обнаруживает целевую запись, используя индексный номер, он работает намного быстрее, чем методы Find, однако, прежде чем вы сможете его использовать, содержимое базы данных должно быть проиндексировано.
Используйте метод AddNew для занесения новой записи в набор или перехода к новой записи. Если вы уже создали новый объект Recordset под названием rstIng, все, что вам необходимо для добавления новой записи, - это инструкция rst.Ing. После этого вы можете приступать к заполнению полей записи (подробности в разделе '"Изменение данных поля" дальше в настоящей главе). Однако, если хотите, можете указать значения полей сразу при создании новой записи. Метод -AddXew позволяет вам указывать поля и их значения, как показано ниже:
With rstIng
Array ( "Имя", "Возраст", "Пол"; .
Array("Анна", 42, "Ж")
End With
Как видно из этого примера, вы передаете аргументы методу AddNew в виде пары массивов, первый из которых содержит имена полей, а второй - их значения. В этом примере я использовал функцию Array VBA для создания на ходу массива, содержащего строковые значения. Вместо этого вы можете использовать переменные, представляющие массивы, которые вы создали раньше. В любом случае подобный прием для обеспечения значений полей массивов в момент создания новой записи означает, что вам не нужно вводить отдельную строку кода для каждого поля.
Для удаления текущей записи предназначен метод Delete.
Работа с текущим значением определенного поля с помощью программного кода так же проста, как и считывание значения свойства Value этого поля. Укажите поле по имени или по его индексному номеру, как показано в приведенных ниже примерах. Обратите внимание на то, что свойство Value является свойством по умолчанию, поэтому указывать его в коде не обязательно:
If rstYGate.Fields ("Service visits").Value >10
MsgBox "This unitneeds a major over haul!"
End If
strCurrentFieldData = rstYGate.Fields(3)
Поскольку коллекция Fields является коллекцией по умолчанию объекта Recordset, вам не обязательно указывать ее по имени. Для обращения к полю просто укажите его имя, предварительно поставив восклицательный знак и заключив в квадратные скобки имена, содержащие пробелы: rstYGatelDate = #5/15/2001#
With rstYGate
intltems =![Oil cans]
End With
Изменение (обновление) данных поля определенной записи с помощью ADO совсем несложно. Все, что вам необходимо сделать, - указать новое значение, после чего переместиться к другой записи, как показано ниже (здесь предполагается, что набор записей rstBucket уже открыт и содержит определенные данные):
KithrstBucket
.Fields ( 0).Value = "Love"
.MoveNext
End With
А если вы не хотите перемещаться от текущей записи, можно внести изменения в базу данных, воспользовавшись методом Update. В приведенном ниже примере я воспользовался преимуществами, обеспечиваемыми стандартным состоянием коллекции Fields и свойством Value, чтобы свести к минимуму код, который необходимо написать:
With rstBucket
!Value =8.93
.Update
End With
Как и метод AddNew, метод UpDate позволяет вам передать значения новых полей с помощью пары массивов, как показано ниже:
With rstBucket
.Update Array("Имя", "Звание", "Любимый напиток"),
Array("Лола", "Младший лейтенант", "Кофе")
End With
Используйте цикл Do для проверки или операций с несколькими записями в наборе, как показано в следующем примере;
'Циклическое перемещение между записями в наборе
With rstInPeace
Do Until .EOF
Debug.Print.Fields(0)
.MoveNext
Loop
End With
SetrstInPeace = Nothing
End Sub
- 12.1. Автоматизированная проверка безопасности
- 18. Проверка контактных сведений
- Оптимальная структура хранения записей
- Настройка учетных записей пользователей
- 5. Null-значения и проверка условий
- Настройка учетных записей
- 12.3. Проверка конфигурации
- Проверка, что сервер Firebird запущен
- Настройка учетных записей почты
- Проверка на вирусы с помощью сканера Dr.Web
- Проверка правописания
- Проверка и ремонт