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

Если вы не указали тип создаваемого объекта Recordset, в рабочей области Jet по умолчанию создается либо объект табличного типа (если источником является локальная таблица), либо динамический набор записей (если источником является запрос или связанная таблица). В рабочей области ODBCDirect по умолчанию создается статический набор записей с последовательным доступом. Аргумент <параметры> задается константой, которая ограничивает изменения данных в создаваемом наборе записей. Например, константа dbAppendOnly означает, что разрешено только добавление записей в объект Recordset, и применяется только к динамическому набору записей. А константа dbDenyRead запрещает другим пользователям не только изменять и добавлять записи, но и читать данные из таблицы. Эта константа применима только к объекту типа Таблица. Подробнее о возможных значениях аргумента см. справку Microsoft Access. Последний аргумент — это тоже константа, определяющая тип блокировки записей создаваемого объекта. По умолчанию в рабочей области Jet применяется тип блокировки dbPessimistic, а в рабочей области ODBCDirect — dbReadOnly. стинге 5.25 приводятся примеры создания наборов записей на основе ра:< объектов.

Листинг 5.25. Создание наборов записей (DАО)

Dim db As  Database,   rs As  Recordset,   td As TableDef

Dim qd As  QueryDef

Set  db = CurrentDB

cоздание  объекта  Recordset типа Таблица на  основе  таблицы в  текущей базе данных

Set   rs  = db.QpenRecordset("Сотрудники", dbAppendOnly)

cоздание объекта  Recordset  типа Статический  набор  записей

Set   td =  db.TableDef5("Сотрудники")

Set   rs  =  td.OpenRecordset(dbOpenSnapshot)

cоздание  набора  записей  на основе  запроса

Set  qd  = db.QueryDefs("ИсторияНазначений")

Set   rs  = qd.OpenRecordset(,dbOptimistic)

В первом случае мы создали объект Recordset типа Таблица на базе объекта >ase, указав в качестве источника локальную таблицу Сотрудники.

Во втором случае мы создали объект Recordset на базе локальной таблицы, ука-лециально тип объекта Статический набор записей. Статический набор за и не является стандартным ни для одного из источников, поэтому, если тре-:я создать этот тип объекта Recordset, нужно явно использовать константу enSnapshot

В третьем случае мы создали объект Recordset на базе запроса в базе данных. При создается динамический набор записей с пессимистической блокировкой, чение параметра dbOptimistic изменяет тип блокировки на оптимистический. сех вышеприведенных примерах объекты Recordset создавались на основе ктов, которые сохранены в базе данных Access. Существует возможность 1ть набор записей на основе временного запроса, например так:

Dim  rst As  Recordset

Dim  strSQL As  String

выбираем данные  о двух  таблицах Авторы и  Издания

strSQL = "SELECT Авторы.КодАвтора, Издания.Название," _

 &  "Издания.ГодИздания FROMИздания INNERJOIN Авторы "_

 &  "ON  Издания.КодИздания  = Авторы.КодИздания "_

&  "ORDER BY Издания.Название"

cоздаем объект  Recordset,   выполняя   инструкцию  SQL

Set   rst  = CurrentDb.OpenRecordset   (stSQL)

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

Объект Recordset существует и в модели ADO и имеет то же назначение, что и в модели DAO. Он может быть создан тремя различными способами: помощью метода Execute объекта Connection с помощью метода Execute объекта Command с помощью метода Open объекта Recordset.

Первые два способа возвращают статический набор записей, поэтому могут использоваться только тогда, когда этот набор записей нужен для просмотра данных. В листингах 5.26 и 5.27 приводятся примеры создания объекта Recordset с помощью метода Execute объекта Connection.