VBA для чайников
Шрифт:
End If
strCurrentFieldData = rstYGate.Fields(3)
Поскольку коллекция Fields является коллекцией по умолчанию объекта Recordset, вам не обязательно указывать ее по имени. Для обращения к полю просто укажите его имя, предварительно поставив восклицательный знак и заключив в квадратные скобки имена, содержащие пробелы: rstYGatelDate = #5/15/2001#
With rstYGate
intltems =![Oil cans]
End With
Изменение (обновление) данных поля определенной записи с помощью ADO совсем несложно. Все, что вам необходимо
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
Использование объекта Command
В ADO объект Command представляет команду, такую как инструкция SQL или сохраненная процедура, которая может применяться к источнику данных. Вы можете использовать объекты Commands для получения записей из объектов Recordset, а также выполнения таких операций, как обновление или удаление нескольких записей. (Пример программного кода, приведенный ниже, выполняет только последние операции; примеры, использующие наборы записей, приведены раньше в настоящей главе.)
Не удивляйтесь, если вы не сможете использовать объект Command с определенным источником данных. Средства доступа OLE DB Provider не нужны для реализации объекта Command, а значит, и не требуются для обработки параметров.
Хранимые процедуры - это запросы и другие операции, которые вы или кто-нибудь еще определили раньше (обычно с помощью SQL) и сохранили в источнике данных. В качестве хранимых процедур можно привести запросы Access. Несмотря на то, что вы можете спроектировать запрос Access визуально с помощью сетки, он представляет собой инструкцию, которую вы увидете, выбрав
Хранимая процедура уже готова к использованию, поэтому вам необходимо знать только ее имя: вы можете спокойно забыть обо всех тонкостях определения запроса с помощью программного кода. Еще важнее, что хранимые процедуры выполняются намного быстрее и более надежны при использовании в сети, чем эквивалентные инструкции SQL. Однако инструкции SQL для вашей хранимой процедуры не являются частью кода, а значит, вы не сможете при необходимости их изменять.
Настройка объекта Command
Для настройки объекта Command вам следует начать с объявления соответствующей переменной и создания собственно объекта. После этого вы можете использовать свойства объекта для связи его с подключением, для определения команд, которые должны выполняться в форме инструкции SQL или имени хранимой процедуры, а также для определения типа операции. После этого вы можете использовать метод Execute объекта Command для действительного выполнения команды. Ниже приведен пример инструкции обновления SQL.
Обратите внимание на свойство CommandType, которому вы должны присвоить значение adCmdText для передачи инструкции SQL источнику данных:
Dim consecrate As Connection
Dim cmdVBA As Command
Dim prmDate
( Connection...)
Set cmdVBA = New Command
With cmdVBA
.ActiveConnection = consecrate
.CommandText = _ "UPDATE Bicycles SET OnSale = True" _
& "WHERE Category = 4;"
.CommandType = adCmdText
.Execute
End With
Использование параметров команды
Если для выполнения команды требуются входные параметры (значения, передаваемые команде при выполнении, например диапазон данных или критерий поиска), вы должны определить индивидуальные объекты Parameter, добавляя их к коллекции Parameters объекта Command. Пример, приведенный ниже, иллюстрирует, как это все работает, и как можно использовать объект Command для выполнения хранимой процедуры, а не инструкции SQL:
Dim consecrate As Connection
Dim cmdVBA As Command
Dim prmDate
( Connection...)
Set cmdVBA = New Command
With cmdV3A
.ActiveConnection = consecrate
.CommandText = "qryDeleteOldRecords"
.CommandType = adCmdStoredProc ' in Jet, _
adCmdTable
End With
Set prmDate - New Parameter
With prmDate
.Name = "Date"
.Value = InputBox "Enter the cut-off date."
.Type = adDate