Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
66
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

3.11.4. Отчет из нескольких таблиц с группировкой данных и итогами

Рассмотрим порядок создания сложных отчетов на примере создания отчета «Итоги Олимпиады». База зарегистрирована под псевдонимом (алиасой) «Olimpiada» при помощи BDE Administrator.

База данных в формате Paradoxсоздана средствамиDatabaseDesktop и состоит из четырех таблиц:

  1. «Страны» (Strani.db) с полями:KS(код страны),NS(название страны).

  2. «Виды спорта» (Vidi_Sporta.db) с полями:KVS(код вида спорта),NVS(название вида спорта).

  3. «Спортсмены» (Sportsmeni.db) с полями:RN(индивидуальный регистра­цион­ный номер),Fam(фамилия).

  4. «Призеры» (Prizeri.db) с полями:KS(код страны),KVS(код вида спорта),RN(индивидуальный регистрационный номер),Z(число золотых медалей),S(число серебряных медалей),B(число бронзовых медалей).

На этапе создания базы данных связи между таблицами не формируются. Рассмотрим шаги по формированию отчета.

  1. В Delphi7 создадим новый проект и модуль данных командойFile/New/DataModule (рис. 3.11.4.1).

Рис. 3.11.4.1. Окно модуля данных

На главной форме разместим две кнопки: для вызова отчета и для выхода из приложения. Добавим на форму модуля данных компонент Query. Для этого компонента создадим запрос командойSQLBuilder из контекстного меню. В полеDatabaseвыберем базу данных «Olimpiada», перенесем в запрос таблицы «Призеры» (Prizeri.db), «Страны» (Strani.db), «Виды спорта» (Vidi_Sporta.db), «Спортсмены» (Sportsmeni.db). Свяжем таблицы (рис. 3.11.4.2). Результат запроса будет отображать поляNS(название страны) иNVS(название вида спорта) вместо их кодов и полеFam(фамилию участника) вместо его регистрационного номера.

Рис. 3.11.4.2. Окно Построителя запросов

  1. Командой File/Use Unitподключим модуль данных к главной форме.

  2. Разместим на форме модуля данных компоненты RvProject,RvSystemиRvQueryConnectionсо страницыRave(рис. 3.11.4.1). Свойство Engine компонента RvProject1 установим равным RvSystem1. Свяжем компонент RvQueryConnection1 с запросом Query1 (свойствоQuery). Двойным щелчком на компоненте RvProject1 вызовем конструктор отчетов Rave Reports 5.0 (рис. 3.11.2.1).

  3. Введем в проект объект просмотра данных. Для этого выполним команду File/New Data Object. Откроется окно выбора типа объекта. Выберем DirectDataViewи нажмем кнопкуNext. Появится диалоговое окно Data Connections со списком объектов доступа к данным. Выделим компонент RvQueryConnection1, щелкнем на кнопке Finish. В дереве объектов, в правой части окна конструктора, в вершине Data View Dictionary появятся источники данных DataView.

  4. Расположим компонент Region (со страницы Report) на всей площади страницы, оставив сверху место для заголовка отчета и заголовков столбцов.

  5. Разместим в компоненте Region1 шесть информационных полос: сначала две обычных полосыBand, затем - одну полосу данныхDataBand, затем снова три обычных полосыBand(рис. 3.11.2.1). В полосе данныхBand1 будет размещаться название страны. В полосуBand2 будет выводиться название вида спорта. ПолосаDataBand1 служит для вывода фамилий призеров, а также числа золотых, серебряных и бронзовых медалей у каждого из них. Обычная полоса Band3 будет содержать итоговые данные (количество медалей разного достоинства) по виду спорта,Band4 – по каждой стране. В полосуBand5 будут выводиться итоги по отчету.

  6. Расположим в полосе Band1 компонент DataText со свойствами DataView=DataView1, DataField=NS. В свойстве ControllerBand этой по­ло­сы выберем DataBand1 (мы указали, что эта полоса будет управляться полосой DataBand1). СвойстваGroupDataView=DataView1,GroupKey=NS. Установим свойство BandStyle, редактор которого вызывается кнопкой с многоточием. В диалоговом окне Band Style Editor установим флажок напротив значенияGroupHeader.

  7. В полосе под именем Band2 будут выводиться названия видов спорта. Установим свойство BandStyle= GroupHeaderдля этой полосы. Группировка данных в этой полосе будет производиться по полюNVSисточника данныхDataView1 (GroupDataView=DataView1,Group­Key=NVS). Разместим в полосе компонентDataTextпод именемDataText2 со свойствами:DataView=DataView1,DataField=NVS.

  8. В полосе DataBand1 будут выводиться имена медалистов и число золотых, серебряных и бронзовых медалей у каждого из них. Свяжем полосу с просмотром данных DataView1. В свойстве BandStyle отметим пункт Detail. Теперь разместим в этой полосе четыре компонента DataText, свяжем их с источником данных DataView1, один из них – с полемFam, три других – с полямиZ, S, B соответственно.

  9. Полоса Band3 содержит итоговые данные по виду спорта. Свойства этой полосы: ControllerBand=DataBand1, BandStyle=Group Footer, GroupDataView=DataView1, Group­Key=NVS. Разместим в этой полосе компонентTextсо страницыStandardcтекстом «Итого медалей по виду спорта». Добавим на эту полосу три компонентаCalcText(панельReport) со свойствами: Controller=DataBand1;CalcType=ctSum,DataFieldравноZ,SилиBсоответственно.

  10. Полоса Band4 содержит итоговые данные по стране и имеет свойства: ControllerBand=DataBand1, BandStyle=GroupFooter,GroupData­View=DataView1,Group­Key=NS. Разместим в этой полосе компонент Text с текстом «Итого медалей по стране». Аналогично предыдущему пункту добавим на эту полосу три компонентаCalcTextсо свойствами Controller=DataBand1;CalcType=ctSum,DataFieldравноZ,SилиB

  11. В полосе Band5 расположим компонент Text с текстом «Итого медалей разыграно». Рядом расположим три компонента CalcText. Их свойства установим такими же, что и в предыдущем пункте. Свойство BandStyleэтой полосы нужно установить вBodyFooter.

  12. Создадим заголовок отчета. Перенесем на форму компонент Text, разместим его над компонентом Region. Внесем в него текст «Итоги Олимпиады». Чуть ниже расположим два компонента DataText. В свойство DataField одного из этих компонентов укажем Report.DateShort. В свойство DataField другого компонента внесем строку: 'Лист ' +Report.CurrentPage. Это даст нам возможность отобразить в отчете сегодняшнюю дату и номер текущего листа. Над компонентомRegionразместим четыре компонента Text, занесем в них заголовки колонок отчета (Призер, Золото, Серебро, Бронза).

  13. Отформатируем отчет (установим нужные свойства шрифтов, добавим линию, отделяющую заголовки колонок отчета, выровняем компоненты в полосах). Разработка отчета завершена, его можно запустить в окне предварительного просмотра (кнопка ExecuteReport) и распечатать (рис. 3.11.4.3). Отчет сохраним в папке проекта под именем Project1.

Рис. 3.11.4.3. Вид отчета на бумаге

  1. Вернемся в Delphi. В свойстве ProjectFile компонента RvProject1 укажем имя файла проекта Rave, под которым мы сохранили наш отчет. Зададим FormState=wsMaximizedи, при необходимости, другие значения свойствам предварительного просмотра и печати отчетов.

  2. В обработчик события OnClick кнопки Отчетдобавим следующие операторы:

DataModule1.RvProject1.Open;

try

DataModule1.RvProject1.Execute;

finally

DataModule1.RvProject1.Close;

end;

В обработчик события OnDestroy формы Form1 добавим оператор:

DataModule1.RvProject1.Close;

Это обеспечит удаление отчета из памяти, если отчет запускался при выполнении приложения.

В обработчик события кнопки Выходдобавим оператор Close.

Создание приложения завершено. Откомпилируем и сохраним его.