Шаг 31 - Удаление и создание запросов в ходе выполнения программы

Запросы мы с Вами рассматривали в шагах "Шаг 9 - Делаем запрос", "Шаг 20 - Запросы и таблицы", "Шаг 21 - Создаем запрос". Но у Всех этих запросов есть один недостаток, они статические. То есть один раз его создал и потом нужно менять. А как же с динамикой. Ну например есть таблицы с такой схемой.

31_1.gif (2621 b)

Здесь в таблице parther находиться список организаций. Нам нужно в ходе работы выводить запросы на основе этого организации. Ну типа того, сколько счетов от них и на какую сумму. Можно конечно заранее сделать много запросов. А что есть новая организация, пользователь ее добавит, но делать запрос. Вот от сюда и выход что запрос нужно формировать автоматически. Делаем форму на ней поле со списком на основе этой таблицы и кнопку, по которой будет строиться запрос.

31_2.gif (2826 b)

К кнопке код:

Private Sub Кнопка4_Click()

Dim dbs As Database, qdf As QueryDef, strSQL As String
	' имя организации
Dim strOrd As String

	' Возвращает ссылку на текущую базу данных.
	Set dbs = CurrentDb
	' установить фокус
	Me.Организация.SetFocus
	' получает строку из поля со списком
	strOrd = Me.Организация.Text
	strOrd = "'" + strOrd + "'"
	' построить запрос
	strSQL = "SELECT parther.Name,chet.Nomer, chet.Data, chet.Prixod, chet.Rasxod FROM parther 
	INNER JOIN chet ON parther.ID_PARTHER = chet.ID_PARTHER  WHERE parther.Name=" + strOrd
	strSQL = strSQL + " ORDER BY chet.Data; "
	' Создает новый запрос.
	dbs.QueryDefs.Delete ("приход")
	Set qdf = dbs.CreateQueryDef("приход", strSQL)
	DoCmd.OpenReport "parther", acViewPreview
	Set dbs = Nothing
End Sub

Самое главное здесь вот что dbs.QueryDefs.Delete ("приход") удаляет старый запрос а Set qdf = dbs.CreateQueryDef("приход", strSQL) строит новый запрос на основе которого построен отчет DoCmd.OpenReport "parther", acViewPreview.

31_3.gif (3937 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 26.09.2001