Опубликован: 19.05.2006 | Доступ: свободный | Студентов: 8143 / 1485 | Оценка: 4.04 / 3.81 | Длительность: 09:46:00
Лекция 6:

СУБД Microsoft Visual FoxPro. Отчеты, запросы, проекты и приложения

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Аннотация: Рассмотрены назначение и виды отчетов, запросов и проекта при работе с базами данных. Разобрана последовательность разработки отчета с помощью Мастера, виды и свойства объектов отчетов, модификация его в Конструкторе. Изложены основы разработки запросов с помощью Мастера, Конструктора и SQL-программы. Дается 2 способа создания проекта: простейшего на основе одной экранной формы и созданного с помощью Мастера приложений. Приведен синтаксис основных команд и функций алгоритмического языка системы. Цель: освоение методов создания и использования отчетов, запросов и проектов в Visual FoxPro.

Разработка отчетов

Для разработки отчетов - печатных документов, отражающих информацию базы данных, в системе VFP существует Конструктор отчетов ( Report Designer ) и Мастер отчетов ( Report Wizard). Важным свойством отчетов является возможность группировки данных и получения итоговых данных для групп и всего отчета. При формировании отчетов можно задавать фильтр отбора необходимых данных либо формировать отчет на основе данных SQL-запроса или представления данных (View).

Наиболее просто для разработки основы отчета воспользоваться Мастером отчетов с последующей модификацией и дополнением отчета в Конструкторе.

Существует 2 типа Мастера отчетов:

One-to-Many Report Wizard - Мастер отчета, в котором для одной записи главной таблицы существует множество записей связанной с ней дочерней таблицы.

Report Wizard - Мастер простого отчета, но с возможностью задания группировки данных.

Поставим задачу разработать отчет, в котором показаны экзаменационные оценки всех студентов за зимнюю сессию 2005-2006 учебного года (с 10.01.2006 по 06.02.2006) с группировкой данных по факультетам, курсам, группам и в группе - по фамилиям студентов.

Как обычно, создание нового объекта начинаем, нажав кнопку New на стандартной панели инструментов, затем выбираем Report - Wizard - One-to-Many Report Wizard.

Далее на первом шаге Мастера (рис. 6.1) выбираем базу Students и поля главной таблицы базы ( Spisok ), которые мы хотим показать в отчете.

Шаг 1 Мастера разработки отчета

Рис. 6.1. Шаг 1 Мастера разработки отчета

На втором шаге (рис. 6.2) выбираем поля дочерней таблицы - Ocenki.

Шаг 2 Мастера разработки отчета

Рис. 6.2. Шаг 2 Мастера разработки отчета

Третий шаг - подтверждаем, что эти таблицы связаны по значению поля NZ.

На четвертом шаге необходимо задать порядок сортировки данных в отчете. Мастер позволяет задать не более трех значений полей для сложной сортировки (с созданием соответствующего сложного индекса). Выберем поля N_fclt, Kurs, N_grup с сортировкой в порядке возрастания ( Ascending ).

Пятый шаг (рис. 6.3) - задаем стиль отчета, расположение его на листе (вертикальный лист - Portrait или горизонтальный - Landscape ) и суммарные параметры - расчет среднего значения ( Avg ) для поля Ball.

Шаг 5 Мастера разработки отчета

Рис. 6.3. Шаг 5 Мастера разработки отчета

На последнем, 6-м шаге задаем заголовок отчета, выбираем команду Сохранить отчет и модифицировать его в Конструкторе отчетов - Save report and modify it in Report Designer и после нажатия на кнопку Finish задаем имя ( Spisok ) и место сохранения файлов отчета (будут созданы два файла с одинаковым именем и расширениями *.frt и *.frx).

В окне Report Designer мы увидим отчет, показанный на рис. 6.4.

Окно Конструктора отчетов

увеличить изображение
Рис. 6.4. Окно Конструктора отчетов

В Конструкторе отчет разбит на отдельные зоны, информация которых может присутствовать в отчете один раз ( Title и Summary ), в начале каждой страницы ( Page Header ) или в конце каждой страницы ( Page Footer ), в начале каждой группы ( Group Header, групп может быть много) и в конце каждой группы ( Group Footer ), а также зона показа информации каждой записи таблицы ( Detail ).

Особенность отчета, созданного Мастером, - в нем присутствуют зоны итогов для группы NZ и всего отчета, но поля для расчета средней оценки в них нет, хотя мы просили Мастера это сделать (см. рис. 6.3.). Заданное условие не было выполнено, т.к. поле ball имеет текстовый тип, а мы задали функцию для работы с числами. Для вычисления средней оценки придется самим добавить новое поле в отчет с расчетом средней оценки, после преобразования в этом поле текстового значения в числовое с использованием функции Val(ball).

Контекстное меню для Конструктора отчетов (щелчок правой кнопкой мыши на пустом месте окна Report Designer ) содержит следующие пункты (рис. 6.5.):

Контекстное меню

Рис. 6.5. Контекстное меню
  • Paste - вставить;
  • Run Report: - напечатать отчет на принтере;
  • Print Preview - предварительный просмотр отчета на экране и печать на принтере;
  • Data Environment: - окно данных, связанных с отчетом;
  • Optional Bands: - страница свойств зон Title, Summary и Detail в окне свойств отчета;
  • Data Grouping: - страница группировки данных в окне свойств отчета;
  • Variables: - страница переменных в окне свойств отчета;
  • Properties: - окно свойств отчета.

Для использования в отчете названий факультетов, специальностей и предметов необходимо открыть окно Data Environment, добавить в него справочные таблицы базы и правильно установить связи между ними, как показано на рис. 6.6. (для постоянных связей базы иногда возникает неправильное направление, связь должна идти от поля главной таблицы к индексу дочерней).

Окно данных отчета

Рис. 6.6. Окно данных отчета

Для связи между таблицами Spisok и Ocenki должно быть установлено свойство OneToMany = .T.

Для таблицы Spisok в окне Properties для Data Environment зададим фильтр VAL(Ocenki.ball)>1 AND VAL(Ocenki.ball)<6 AND Ocenki.data_b=>{^2006/01/10} AND Ocenki.data_b<={^2006/02/06} - условие отбора студентов, у которых есть оценки (от 2 до 5, среди баллов могут быть отметки о неявке (Н), незачете (1), зачете (6) и пр.) в заданном периоде (в фильтре используется формат даты в виде {^ГГГГ/ММ/ДД}). Установленный фильтр имеет особенность: фильтр задан для таблицы Spisok, а его логическое выражение построено из значений полей таблицы Ocenki, что не совсем обычно, но допустимо при наличии связи между этими таблицами. Если данное выражение написать как фильтр для таблицы Ocenki, в отчет могут попасть студенты, у которых нет оценок за заданный период, и средняя оценка будет рассчитана неправильно.

Для дальнейшего оформления отчета необходимо присутствие на экране двух панелей инструментов - Report Controls и Layout.

Первая панель содержит те объекты, которые можно располагать на отчетах (рис. 6.7.).

Панель объектов отчета

Рис. 6.7. Панель объектов отчета

Так как наша задача - представить отчет с группировкой и расчетом средних оценок по факультетам, курсам, группам, необходимо добавить новые группы в отчет и модифицировать, соответственно, индексный файл главной таблицы. Выбрав пункт Data Grouping в контекстном или главном меню (раздел Report ), добавим необходимые группы (рис. 6.8.).

Страница группировки данных в окне свойств отчета

Рис. 6.8. Страница группировки данных в окне свойств отчета

Далее перенесем номера факультетов, курсов и групп в зоны заголовков соответствующих групп, добавим поля с названиями из справочников факультетов, специальностей и предметов, добавим итоговые поля для расчета средних оценок ( val(ocenki.ball )). Новые поля можно создать с использованием соответствующей кнопки на панели Report Controls (рис. 6.7.) или копированием имеющихся в отчете полей (для сохранения заданного шрифта) с изменением данных, которые показывает поле (свойство Expression поля).

В свойствах итоговых полей (окно свойств выбранного поля открывается двойным кликом на нем, или выбором пункта Properties в его контекстном меню, или на клавиатуре Alt+Enter) в разделе Calculate следует правильно указать в пункте Calculation Type - Average (среднее) и в пункте Reset based on - соответствующую группу или End of Report для зоны Summary (см. рис. 6.9.).


Окно свойств поля отчета. Страницы General и Calculate

Рис. 6.9. Окно свойств поля отчета. Страницы General и Calculate

Для таблицы Spisok следует модифицировать созданный Мастером сложный индекс с именем WIZARD_1 - добавить в него поле FIO: STR(n_fclt,2,0) + STR(kurs,1,0) + n_grup + fio.

Отчет в Конструкторе будет иметь вид, показанный на см. рис. 6.10..

Окончательный вид отчета в Конструкторе

увеличить изображение
Рис. 6.10. Окончательный вид отчета в Конструкторе

При предварительном просмотре ( Preview ) или после печати на принтере мы получим отчет, показанный на рис. 6.1. (примечание: перед формированием отчета откройте таблицу Ocenki, иначе заданный фильтр для таблицы Spisok вызовет сообщение об отсутствии алиаса Ocenki ).

Фрагмент отчета, напечатанного на принтере

увеличить изображение
Рис. 6.11. Фрагмент отчета, напечатанного на принтере
< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Данил Корляков
Данил Корляков

Прошел весь курс всего за день, щёлкал ваши тесты, как орешки. Хочу вторую часть! laugh

Олеся Талдыкина
Олеся Талдыкина