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

Запросы, которые хранятся в базе данных Access, содержатся в семействе QueryDefs объекта Database в модели DAO. Чтобы создать новый запрос, нужно создать объект QueryDef с помощью метода CreateQueryDef объекта Database. Объект QueryDef может содержать любой тип запроса, создаваемого интерактивно в Конструкторе запросов. Сам запрос, который представляет собой инструкцию SQL, хранится в свойстве SQL объекта QueryDef. Поэтому, чтобы определить запрос и сохранить его в базе данных, нужно задать, по крайней мере, два свойства объекта QueryDef: Name и SQL.

Для выполнения запроса используются два метода объекта QueryDef:

·  Open Recordset — при выполнении запросов на выборку записей;

·  Execute — для выполнения запросов на изменение данных.

В листингах 5.20 и 5.21 приводятся примеры создания и выполнения того и другого типа запроса.

Листинг 5.20. Создание постоянного объекта QueryDef и его выполнение (DАО)

Dim db As  Database,   qd As Querydef,   rs As  Recordset

Set  db = CurrentDB

'создаем новый  запрос  и  сохраняем его в баз*е данных

Set  qd = db.CreateQueryDef("Назначения")

qd.SQL = "SELECT ФИО,Должность, Оклад  FROM  Персонал"

'создаем набор  записей  на базе нового запроса

Set  rs  = qd.OpenRecordset(dbOpenDynaSet)

Когда при использовании метода CreateQueryDef указывается имя запроса, этот запрос автоматически добавляется в список запросов в окне базы данных и в семейство QueryDefs. Однако запросы, сохраняемые в базе данных, удобнее строить с помощью Конструктора запросов. Программным путем обычно создают временные запросы, которые выполняются, но не сохраняются. Пример такого запроса приведен ниже. Это процедура очистки таблицы ВремИздания.

Листинг 5.21. Создание временного запроса (ОАО)

Private  Sub ClearTableO Dim qd As  QueryDef

Set qd = CurrentDB.CreateCueryDef ("")

qd.SQL =   "DELETE   *   FROM  ВремИздания"

qd.Execute

End  Sub

В этой процедуре создается запрос на удаление записей. Он выполняется с помощью метода Execute объекта QueryDef.

Запрос с параметрами также можно выполнить из процедуры VBA, программно задав значения параметров. Для этого используется семейство Parameters соответствующего объекта QueryDef. В следующем примере задаются значения параметров запроса Поступления, в котором выбираются все сотрудники, принятые на работу в течение заданного периода времени. Запрос имеет два параметра, определяющего период. Значение первого параметра берется из поля формы, а значение второго параметра — текущая дата.

Листинг 5.22. Выполнение запроса с параметрами (DАО)

Dim qd As  QueryDef

'создаем ссылку  на  запрос   "Поступление"

Set  qd  = CurrentDB.QueryDefs("Поступление")

'устанавливаем  значения  параметров

gd.Parameters(O)  = Forms![Период]

gd.Parameters(l)  = Date()

'выполняем запрос

Set   rs = qd.OpenRecordset()

В модели ADO для выполнения запроса можно использовать метод Execute объекта Connection или объект Command. В листинге 5.23 приведен пример, использующий объект Command для выполнения запроса на удаление записей из таблицы.

Листинг 5.23. Создание временного запроса (ADO)

Sub ClearTable()

Dim cmd As ADODB.Command

Set  cmd = New ADODB.Command

With cmd

       .ActiveConnection = CurrentProject.Connection

       .CommandText  =  "DELETE   *   FROM  ВремИздания"

.Execute

End With

Set cmd = Nothing

End  Sub

Сначала создается объект Command, затем устанавливается его свойство Active-lection. Ему присваивается либо значение объектной переменной, ссылающей-ia уже открытый объект Connection, либо строка подключения, которая опре-1ет источник данных. Во втором случа'е неявно создается и объект Connection, шном примере свойство ActiveConnection ссылается на текущую базу данных.