Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_БД.doc
Скачиваний:
28
Добавлен:
04.05.2019
Размер:
4.03 Mб
Скачать

Отчет для связанных наборов данных

Создать отчет на основе данных, получаемых из нескольких таблиц БД, можно двумя способами.

  1. С помощью компонента Query объединить данные из нескольких таблиц в один набор данных, затем построить отчет обычным образом.

  2. Создать несколько наборов данных (по одному на каждую таблицу), соединить эти наборы связью “главный-подчиненный” с помощью свойств MasterSource и MasterFields. Для отображения информации из связанных наборов данных применяются компонент QRBand (для главной таблицы) и компонент QRSubDetail (для подчиненной таблицы).

Компонент QRSubDetail предназначен для включения в отчет информации из подчиненной таблицы. Свойство DataSet этого компонента должно содержать ссылку на подчиненный набор данных.

Пример. Создать отчет для связанных таблиц БД “Pokupka”. БД содержит две таблицы: Tovar.db и Pokupka.db. Главной таблицей является Tovar.db, а подчиненной Pokupka.db, связь устанавливается по полям Code_Tovar главного и подчиненного набора данных.

Для полосы данных QRBand в качестве набора данных устанавливается главный набор. В этой полосе размещаются компоненты QRDBText, связанные полями этого набора данных: Code_Tovar, Tovar, а также компоненты QRLabel – заголовки записей группы покупки товара: Data и Number.

Для полосы детализации устанавливается подчиненный набор данных. В ней размещаются компоненты QRDBText и QRExpr, в которых выводятся значения полей записей подчиненного набора данных.

Чтобы группа не выводилась для товаров, которые не имеют записи о покупке, для полос данных нужно создать обработчик события OnBeforePrint, содержащий команду:

PrintBand:=Form1.Pokupka.RecordCount>0;

Создать колонтитулы групп можно следующим способом: задать подствойствам HasHeader и HasFooter свойства Bands компонента QRSubDetail полосы детализации значения True, и автоматически будет создан соответствующий колонтитул.

Пример. БД Sotrudniki.

              1. На новой форме Form2 расположить:

QuickRep1: Left=0; Top=0; DataSet= Form1.TbDoljn; (главный НД)

QRBand1: BandType=rbTitle

QRLabel: Caption=Список сотрудников;

QRBand2: BandType=rbDetail;

QRDBText1: DataSet=Form1.TbDoljn; DataField=D_Nazv;

QRSubDetail1: DataSet=TbSotrudniki; Master.DataSet=TbDoljn;

Master.DataSet.MasterSource=dsDoljn;

Master.DataSet.MasterField=D_Nazv;

QRDBText2: DataSet=Form1.TbSotrudniki; DataField=S_Fio;

              1. f

Составной отчет

Составной отчет объединяет в себе несколько простых отчетов, которые следуют при печати один за другим.

Для создания композитного отчета используется компонент QRCompositeReport . Объединение отчетов осуществляется в его обработчике события OnAddReport путем добавления названий соответствующих отчетов в список свойства Report данного компонента. Например,

Procedure TForm3.QRCompositeReport1AddReports (Sender: TObject);

Begin

QRCompositeReport1.Reports.Add (Form1.QuickRep1);

QRCompositeReport1.Reports.Add (Form2.QuickRep1);

End;

Здесь композитный отчет составляется из двух отчетов: QuickRep1, который заранее определен в форме Form1, и QuickRep2, определенный в форме Form2.

Предварительный просмотр и печать составного отчета производятся с помощью метода Preview:

QRCompositeReport1.Preview;