6. Создание отчетов с использованием динамически создаваемых запросов
(CreateQueryDef)
(Все примеры тестировались в MS Access 97, для того чтобы приведенный здесь код
работал Access 2000 или XP, необходимо включить в Visual Basic поддержку
Microsoft DAO 3.6 Object Library (Tools\References...))
Для отображения информации хранящейся в БД в MS Access используются отчеты.
Источником данных для отчета может быть как таблица, так и запрос. Зачастую
при создании более-менее сложных отчетов приходится создавать несколько
запросов - для предварительной выборки данных, группировки,
окончательной обработки. Как правило, отчет должен выдавать информацию
в зависимости от некоторых параметров указываемых пользователем.
Учитывая эти факторы, удобнее всего при создании отчетов в MS Access,
бывает создать специальную диалоговую форму в которой пользователь
указывает все параметры отчета, а затем при нажатии кнопки "ПЕЧАТЬ" -
программа создает запрос(запросы) и открывает отчет.
Рассмотрим пример: пусть в нашей базе присутствуют таблицы "СОТРУДНИКИ" и
"Оклады", описанные выше. Создадим новую форму "Печать окладов сотрудников".
Разместим в форме флажок "ВсеДолжности" (значение по умолчанию: -1) и
поле со списком "должность" (испочник данных "SELECT должность FROM Оклады").
Создадим кнопку "Печать". Обработка событий для кнопки "Печать":
Private Sub Кнопка1_Click()
On Error Resume Next 'при ошибке продолжить выполнение процедуры
Dim DB As Database, QD As QueryDef, S As String
Set DB = CurrentDb
'удалить запрос "qSotrOklad" (если он был уже создан)
DB.QueryDefs.Delete "qSotrOklad"
'Создать новый запрос "qSotrOklad"
Set QD = DB.CreateQueryDef("qSotrOklad")
'В перменной S формируем текст запроса
S = "SELECT S.код_сотр, S.фио, S.должность, O.оклад "
S = S & "FROM СОТРУДНИКИ AS S INNER JOIN Оклады AS O ON S.должность = O.должность "
'если флажок "ВсеДолжности" - пуст
If Me![ВсеДолжности] = 0 Then
'если выбрана должность для отбора
If Not IsNull(Me![должность]) Then
'добавляем условие отбора
S = S & " Where O.должность='" & Me![должность] & "'"
End If
End If
'установить текст запроса "qSotrOklad"
QD.SQL = S
'открыть запрос "qSotrOklad"
DoCmd.OpenQuery "qSotrOklad"
End Sub
Откройте форму и проверте работет ли все как задумано, если все в порядке,
создайте с помощью мастера отчет с источником данных "qSotrOklad", а затем
поменяйте в обработке кнопки "Печать" строку
DoCmd.OpenQuery "qSotrOklad"
на
DoCmd.OpenReport "rSotrOklad", A_PREVIEW 'открыть отчет в режиме просмотра
Все отчет готов!
----------------------------------------------------------------------
Архив рассылки
Дополнительная информация, примеры программ http:\\use-access.narod.ru
Написать письмо: use-access@bk.ru