Запросы, которые хранятся в базе данных 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 ссылается на текущую базу данных.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.