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

Статический курсор с последовательным доступом не позволяет изменять, добавлять и удалять записи и не отображает изменения, сделанные другими пользователями. Он обеспечивает перемещение по записям только вперед. Этот курсор создается по умолчанию.

Курсор с доступом по ключу поддерживает изменение, удаление и добавление записей, обеспечивает перемещение по записям в двух направлениях, но не позволяет пользователю видеть записи, добавленные или удаленные другими пользователями.

Динамический курсор поддерживает изменение, удаление и добавление записей, обеспечивает перемещение по записям в двух направлениях, позволяет пользователю видеть изменения, сделанные другими пользователями.

Статический курсор не позволяет изменять записи и не отображает изменения, сделанные другими пользователями. Обеспечивает перемещение по записям в двух направлениях.

Листинги 5.28 и 5.29 демонстрируют разные варианты создания объекта Recordset. В первом примере создается набор записей только для просмотра (определяется типом блокировки). Источником данных является инструкция SQL, а соединение задается с помощью аргумента ActiveConnection. Объект Connection при этом создается неявно. Аргументы метода являются именованными, то есть сначала пишется имя аргумента, а затем значение фактического параметра. В этом случае не имеет значения порядок ввода параметров. С другой стороны, возможен и стандартный способ передачи аргументов по положению в списке аргументов.

Листинг 5.28. Создание объекта Recordset с помощью метода Open

Dim  rst As ADODB.Recordset

Dim  strConnect As  String

Dim strSQL As  String

strConnect =  "Provider=Microsoft.Jet.OLEDB.4.0;"  _

     & "Data Source=C:\Библиотека.mdb;"strSQL = "SELECT * _

     FROM  Авторы WHERE  КодАвтора  = " _

Forms!Издания!КодАвтора

Set   rst  = New ADODB.Recordset

With  rst

.LockType = adLockReadOnly 'указываем тип  блокировки

'создаем Recordset,   передавая  три  аргумента

.Open  Source:= strSQL, ActiveConnection:= strConnect, _

                         Options:=  adCmdText

End With

ПРИМЕЧАНИЕ Использование аргумента Options метода Open позволяет ускорить выполнение   команды, так как этот аргумент явно указывает тип источника данных. В противном случае придется обращаться к провайдеру, чтобы выяснить, как интерпретировать значение параметра <источник>.

Если предполагается использовать несколько объектов Recordset, то, чтобы не создавать отдельного соединения на каждый объект Recordset, нужно объект Connection создать явно. В следующем примере источником данных является таблица Читатели, на основе которой строится динамический набор записей (курсор с доступом по ключу). Таблица Читатели присоединена к текущей базе данных. Перед тем как открыть объект Recordset, явно создается соединение с базой данных (объект Connection).

Листинг 5.29. Создание объекта Recordset на базе таблицы (ADO)

Dim cnn As ADODB.Connection, rst As ADODB.Recordset

Set  cnn = CurrentProject.Connection

Set   rst = New ADODB.Recordset

With  rst

.ActiveConnection = cnn

.CursorType = adOpenKeyset

.Open Source:= "Читатели"

End With

В следующем примере (листинг 5.30) источником данных для объекта Recordset является объект Command. Перед тем как передавать ссылку на объект Command в аргумент метода Open, устанавливается свойство ActiveConnection этого объекта.

Листинг 5.30. Создание объекта Recordset на базе объекта Command (ADO)

Dim cmd As Command

Dim rs As Recordset, str As String

'создаем объект Command

Set cmd = New ADODB.Command

With cmd

.ActiveConnection = CurrentProject.Connection

.CommandText = "SELECT Авторы.* FROM Авторы"

.CommandType = adCmdText

End With

'открываем объект Recordset

Set rs = New ADODB.Recordset

rs.Open cmd