Запросы мы с Вами рассматривали в шагах "Шаг 9 - Делаем запрос", "Шаг 20 - Запросы и таблицы", "Шаг 21 - Создаем запрос". Но у Всех этих запросов есть один недостаток, они статические. То есть один раз его создал и потом нужно менять. А как же с динамикой. Ну например есть таблицы с такой схемой.
Здесь в таблице parther находиться список организаций. Нам нужно в ходе работы выводить запросы на основе этого организации. Ну типа того, сколько счетов от них и на какую сумму. Можно конечно заранее сделать много запросов. А что есть новая организация, пользователь ее добавит, но делать запрос. Вот от сюда и выход что запрос нужно формировать автоматически. Делаем форму на ней поле со списком на основе этой таблицы и кнопку, по которой будет строиться запрос.
К кнопке код:
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.