VBA для чайников
Шрифт:
ADO позволяет вам работать с объектами баз данных, обходясь без предварительного создания объекта Connection: вы можете связать эти объекты с подключением только тогда, когда придет время заполнить их реальными данными. Либо же вы можете создать подключение неявно в процессе определения объекта Recordset или Command. Однако создание объекта Connection явным образом упрощает ваш код и позволяет связывать одно подключение с несколькими другими объектами.
Работа с объектами Recordset
Давайте
После того как вы объявили переменную для объекта Recordset, вы можете немедленно приступить к работе с его свойствами. Однако, в этот момент он существует только "виртуально". Для заполнения пустого контейнера реальными данными прибегните к одному из следующих приемов:
* собственный метод Open объекта Recordset;
* метод Execute объекта Command;
* метод Execute объекта Connection.
Простейший способ создания объекта Recordset - использование метода Open этого самого объекта. Метод Open хорошо работает в том случае, если вы используете простые инструкции Select для получения необходимых записей. Следующий фрагмент кода демонстрирует настройку объекта Recordset с помощью метола Open:
Dim conman As New Connection
Dim rstMan As Recordset
Dim strSQL As String
...(здесь содержится код, используемый для создания объекта подключения conMan) strSQL = "SELECT * FROM Toys" ' выбор всей таблицы Toys
Set rstMan.ActiveConnection = conman
rstMan.Open strSQL,, adOpenForwardOnly, adLockReadOnly, _
adCmdText
Обратите внимание на то, что приведенный выше фрагмент кода связывает подключение с объектом Recordset с помощью свойства ActiveConnection последнего. Кроме того, обратите внимание на то, что параметры, управляющие поведением объекта, указаны в качестве аргументов метода Open.
Инструкции SELECT языка SQL подходят далеко не всегда. В приложениях клиент/сервер эффективность очень часто диктует необходимость создания объектов Recordset путем выполнения процедур (запросов). Если подобной процедуре требуются определенные параметры, в этой ситуации оказывается удобным использование объекта Command для создания объекта Recordset.
Прежде всего настройте объект Command, присвоив его свойству ActiveConnection значение, соответствующее необходимому подключению. После этого вы можете уделить внимание и объекту Recordset. В этом случае вы должны сначала определить параметры этого объекта как свойства. После этого вы наполняете объект Recordset записями, пользуясь результатами выполнения метода Execute объекта Command. Соответствующий пример приведен ниже:
Dim conTest As New Connection
Dim cmdTest As New Command
Dim rstTest As Recordset
Dim strSQL As String
...(код,
... и определяющий строку strSQL)
' Создание объекта Command:
With cmdTest
Set .ActiveConnection = contest
.CommandText = strSQL
.CommandType = adcmdText
End With
rstTest.CursorType = adOpenForwardOnly
rstTest.lockType = adLockReadOnly
Set rstTest = cmdTest.Execute
Последний прием для создания объектов Recordset заключается в использовании метода Execute объекта Connection. Этот подход намного проще, чем использование объекта Connection, кроме того, он позволяет вам работать с сохраненными процедурами. Однако, если для выполнения процедур необходимы определенные параметры, вам придется включить эти параметры в инструкцию SQL. Все это проиллюстрировано на следующем примере кода:
Dim conVert As New Connection
Dim rstVert As Recordset
Dim strSQL As String
...(код, создающий объект подключения conVert
... и определяющий строку strSQL)
rstVert.CursorType = adOpenForwardOnly
rstVert.lockType = adLockReadOnly
Set rstVert - conVert.Execute
Если вам известно, что подключение необходимо только для одного объекта Recordset, предварительное создание подключения не обеспечит никаких преимуществ.
Вместо этого вы можете указать строку подключения в качестве второго аргумента метода
Open объекта Recordset, как показано ниже:
Dim rstInPeace As New Recordset
Dim strSQL As String, strConnect As String strSQL = "SELECT * FROM Bicycles" 'Получение всех записей 1 Код, назначающий строку подключения переменной strConnect rstInPeace.Open strSQL, strConnect, adOpenForwardOnly
Определение параметров объектов Recordset
Вы получаете контроль над созданным объектом Recordset с помощью различных параметров, определяющих вид указателя, тип блокировки и т.д. Вы можете определить эти параметры одним из двух способов, в зависимости от того, каким образом вы создавали объект
Recordset - с помощью аргументов метода Open объекта Recordset, а также свойств этого объекта. Оба подхода были продемонстрированы с помощью фрагментов кода раньше в настоящей главе
В базах данных курсор означает функциональные возможности, необходимые для перемещения между записями. Тип курсора, который вы выбираете для объекта Recordset, определяет, насколько свободно пользователь сможет работать с записями, а также будут ли автоматически отражаться изменения, внесенные другими пользователями. Используйте свойство Cursor Type или соответствующий аргумент метода Open для указания выбранного вами варианта. Все доступные варианты перечислены в табл. 17.1. По умолчанию тип курсора определен как Forward-only.