Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Практическое использование MS Access


Информационный Канал Subscribe.Ru


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
    

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное