Пользователи P> часто генерируют отчеты при использовании приложений базы данных. Здесь мы используем отчет о управлении устройством в качестве примера, чтобы проиллюстрировать, как использовать компонент Qreport и компонент запроса для разработки для создания отчетов из нескольких таблиц данных.
1. Используемая база данных
Здесь мы используем три таблицы данных Foxpro, DLBMK (код категории оборудования), SBXHK (модель и конфигурация оборудования) и BMSBK (отдел оборудования), которые хранятся в каталоге D:/SB. Структура библиотеки выглядит следующим образом:
(I) Имя поля DLBMK Имя поля Тип Объяснение 1 DLBH N3 Категория устройства Номер 2 DLMC C20 Имя категории устройства (II) SBXHK Имя поля поля Тип Объяснение 1 XHBM N3 Модель устройства 2 DLBH N3 DLBH FIEL 4 Конфигурация устройства SBPZ C30 5 SBSL N3 Количество устройств (III) BMSBK Имя поля Тип Пояс объяснение 1 BMMC C20 Имя отделения 2 XHBM N3 Поля XHBM в SBXHK 3 SL N3 Используйте эти три таблицы данных для создания модели устройства, которая доступна только для в компьютерном отделе, но не в других отделениях.
2?
В программе есть две формы: Mainform Mainform и отчет Form Repform. В основной форме есть две части Tbutton, а настройки следующие:
Свойства части и значения атрибутов
PreviewBtn: Tbutton Подпись: Предварительный просмотр
PrintBtn: Tbutton Подпись: Компоненты и свойства в форме отчета о печати репутация установлена следующим образом:
Свойства части и значения атрибутов
Query1: Tquery DatabaseName: D:/SB
Активен: правда
QREP1: набор данных TQUICKREP: QUERY1
TitleBand1: tqrband bandtype: rbtitle
Оболочная полоса1: tqrband bandtype: rbcolumnheader
Drawleft: True
Drawright: True
Drawtop: True
Drawbottom: True
DELINGBAND1: TQRBAND BANDTYPE: RBDETAIL
Drawleft: True
Drawright: True
Drawtop: True
Drawbottom: True
ChildBand1: TQRChildBand ParentBand: Defitalband1
Drawleft: True
Drawright: True
Drawtop: True
Drawbottom: True
TitleLabel: TQRlabel Подпись: Таблица статистики устройства
DLMClabel: TQRLABEL Подпись: категория
SBXHLABEL: TQRLABEL Подпись: модель
SBPZLABEL: TQRLABEL Подпись: конфигурация
SBSllabel: TQRlabel Подпись: количество
DLMCDBTEXT: TQRDBTEXT DATASET: QUERY1
DataField: DLMC
SBXHDBTEXT: набор данных TQRDBTEXT: QUERY1
DataField: SBXH
SBPZDBTEXT: набор данных TQRDBTEXT: QUERY1
DataField: SBPZ
SBSLDBTEXT: набор данных TQRDBTEXT: QUERY1
DataField: SBSL
Shape1 ~ 9: TQRShape Shape: Qrsvertline
Верх: 0
Ширина: 1
Свойство SQL Query1 установлено на:
Выберите A.Dlbh, A.Dlmc, B.Sbxh, B.Sbpz, B.Sbsl
от dlbmk a, sbxhk b
где a.dlbh = b.dlbh и b.xhbm не в
(Выберите XHBM из BMSBK, где TRIM (BMMC) $#@60; $#@62;
Заказ от A.Dlbh Установите значения атрибута Drawleft, Drawright, DrawTop и DrawBottom нескольких компонентов TQRBAND в True, чтобы распечатать границу стола и горизонтальные линии. Компонент TQRShape используется для распечатки вертикальных линий таблицы. DLMCDBTEXT помещается в DetailBand1, несколько других компонентов TQRDBTEXT размещаются на ChildBand1, Shape1 ~ 3 помещается на Headsd1, Shape4 ~ 6 помещается на Defitalband1, Shape7 ~ 9 помещается на ChildBand1.
3. Добавьте код в программу
1 Две события кнопки в Mainform Процедуру tmainform.previewbtnclick (отправитель: tobject)
Начинать
repform.qrep1.preview;
конец;
Процедура tmainformprintbtnclick (отправитель: tobject)
Начинать
repform.qrep1.print;
конец;
2 События до того, чтобы события Headband1, Detailband1 и Childband1 - это обработка Trepform.HeadBand1beforePrint (отправитель: tqrcustomBand; var printband: boolean)
Начинать
Shape1.height: = Headband1.height;
SHAME2.HEITH: = HEAD -BAND1.HEITH;
SHAME3.HEITH: = HEAD -BAND1.HEITH;
Конец;
Процедура trepform.detailband1beforeprint (отправитель: tqrcustomband; var printband: boolean)
Начинать
Printband: = BH $#@60;
Если печатная полоса
Начинать
bh: = Query1 ['dlbh'];
SHAME4.Height: = DetailBand1.Height;
SHAME5.HEITH: = DETHANGBEND1.HEITH;
Shape6.height: = Detailband1.height;
конец
конец;
Процедура trepform.childband1beforeprint (отправитель: tqrcustomband; var printband: boolean)
Начинать
Shape7.height: = Childband1.height;
Shape8.height: = Childband1.height;
SHAME9.Height: = ChildBand1.height;
Конец;
BH следует определить в разделе определения переменной: var bh: shortint = 0;
Высота нескольких частей TQRShape соответствует деталям TQRBAND, что делает вертикальные линии аккуратно печатать. Если высота компонента TQRBAND регулируется на стадии проектирования, не будет никакого поломки вертикальной линии или чрезмерной длины.
Контролируемый с помощью Printband в событии DetailBand1 до Print, основное название категории каждого устройства может быть напечатано только один раз, а не основное имя категории, соответствующее каждой модели. Поскольку значения поля DLBH превышают 0, начальное значение BH установлено на 0, так что оно отличается от значений поля DLBH любой записи, чтобы убедиться, что первое основное имя класса печатается Полем Это генерирует отчет данных, который извлекает данные из нескольких таблиц данных и имеет линии таблиц.
Note: The project file in this example is sbgl.dpr, and the original program files are main.pas and sbrep.pas. If you want to test, please place the three files dlbmk.dbf, sbxhk.dbf, and bmsbk.dbf В каталоге D:/SB.