P> 사용자는 종종 데이터베이스 애플리케이션을 사용할 때 보고서를 생성하면 Delphi 4의 QReport 구성 요소를 사용하면 신속하고 쉽게 보고서를 생성 할 수 있습니다. 여기서는 QREPORT 구성 요소 및 쿼리 구성 요소를 사용하여 여러 데이터 테이블에서 보고서를 생성하는 방법을 설명하기 위해 장치 거버넌스 보고서를 예제로 사용합니다.
1. 데이터베이스 사용
여기에서는 DLBMK (장비 카테고리 코드), SBXHK (장비 모델 및 구성) 및 BMSBK (장비 부서) 세 가지 FoxPro 데이터 테이블을 사용하여 D :/SB 디렉토리에 저장됩니다. 라이브러리 구조는 다음과 같습니다.
(i) DLBMK 필드 이름 필드 유형 설명 1 DLBH N3 장치 카테고리 번호 2 DLMC C20 장치 카테고리 이름 (ii) SBXHK 필드 이름 필드 유형 설명 1 XHBM N3 장치 모델 코드 2 DLBH N3 DLBH 필드 동일한 DLBMK 3 SBXH C30 장치 모델. 4 SBPZ C30 장치 구성 5 SBSL N3 장치 수 (iii) BMSBK 필드 이름 필드 유형 설명 1 BMMC C20 부서 이름 2 XHBM N3 XHBM SBXHK 3 SL N3 수량이 세 가지 데이터 테이블을 사용하여 사용 가능한 장치 모델을 생성합니다. 컴퓨터 부서에서는 다른 부서에서는 그렇지 않습니다.
테이프와 기계, moukaofen?/b>
이 프로그램에는 MainForm MainForm 및 Report Form Repform의 두 가지 형태가 있습니다. MainForm MainForm에는 두 개의 tbutton 부품이 있으며 설정은 다음과 같습니다.
부품 속성 및 속성 값
previewbtn : tbutton 캡션 : 미리보기
printbtn : tbutton 캡션 : 인쇄 보고서 양식의 구성 요소 및 속성은 다음과 같이 설정됩니다.
부품 속성 및 속성 값
query1 : tquery databaseName : d :/sb
Active : True
QREP1 : tquickRep 데이터 세트 : Query1
TitleBand1 : TQRBAND 대역 유형 : RBTITLE
Headband1 : tqrband 밴드 타입 : rbcolumnheader
Dlowleft : 사실
Drawright : True
드로우 탑 : 사실
DrawBottom : True
DetailBand1 : TQRBAND 대역 유형 : RBDETAIL
Dlowleft : 사실
Drawright : True
드로우 탑 : 사실
DrawBottom : True
childband1 : tqrchildband 부모 대역 : DetailBand1
Dlowleft : 사실
Drawright : True
드로우 탑 : 사실
DrawBottom : True
TITLELABEL : TQRLABEL 캡션 : 장치 통계 테이블
dlmclabel : tqrlabel 캡션 : 카테고리
sbxhlabel : tqrlabel 캡션 : 모델
sbpzlabel : tqrlabel 캡션 : 구성
sbsllabel : tqrlabel 캡션 : 수량
dlmcdbtext : tqrdbtext dataset : query1
데이터 필드 : DLMC
sbxhdbtext : tqrdbtext dataset : query1
데이터 필드 : SBXH
sbpzdbtext : tqrdbtext dataset : query1
데이터 필드 : SBPZ
sbsldbtext : tqrdbtext dataset : query1
데이터 필드 : SBSL
Shape1 ~ 9 : TQRSHAPE 모양 : QRSVERTLINE
상단 : 0
너비 : 1
Query1의 SQL 속성은 다음으로 설정됩니다.
A.DLBH, A.DLMC, B.SBXH, B.SBPZ, B.SBSL을 선택하십시오
dlbmk a, sbxhk b
여기서 a.dlbh = b.dlbh 및 b.xhbm이 없습니다
(BMSBK에서 XHBM을 선택하십시오.
A.dlbh의 주문 테이블 테두리 및 수평선을 인쇄하기 위해 여러 tqrband 구성 요소의 drawleft, drawright, drawtop 및 drawbottom 속성 값을 true로 설정하십시오. tqrshape 구성 요소는 테이블의 수직선을 인쇄하는 데 사용됩니다. dlmcdbtext는 DetailBand1에 배치되고, 다른 TQRDBText 구성 요소는 childband1에 배치되고, Shape1 ~ 3은 Headband1에 배치되고, Shape4 ~ 6은 DetailBand1에 배치되고, Shape7 ~ 9는 childband1에 배치됩니다.
3. 프로그램에 코드를 추가하십시오
1. MainForm 프로 시저의 두 개의 버튼 이벤트 tmainform.previewbtnclick (sender : tobject)
시작하다
repform.qrep1.preview;
끝;
절차 tmainformprintbtnclick (sender : tobject)
시작하다
repform.qrep1.print;
끝;
2. Headband1, DetailBand1 및 childband1의 인쇄 이전 이벤트 이전 이벤트는 처리 trepform.headband1beforeprint (sender : tqrcustomband; var printband : boolean)입니다.
시작하다
shape1. -Height : = headband1.Height;
shape2.height : = headband1.Height;
shape3.height : = headband1.Height;
끝;
절차 trepform.detailband1beforeprint (발신자 : tqrcustomband; var printband : boolean)
시작하다
printband : = bh $#@60; query1 [ 'dlbh'];
인쇄 대역이라면
시작하다
BH : = query1 [ 'dlbh'];
shape4.height : = detailBand1.Height;
shape5.height : = detailBand1.Height;
shape6. -Height : = detailBand1.Height;
끝
끝;
절차 trepform.childband1beforeprint (발신자 : tqrcustomband; var printband : boolean)
시작하다
shape7. height : = childband1.- 하이;
shape8. height : = childband1. -Height;
shape9.height : = childband1.height;
끝;
BH는 변수 정의 섹션에서 정의되어야합니다. var bh : shortint = 0;
여러 tqrshape 부품의 높이는 tqrband 부품과 일치하여 수직선을 깔끔하게 인쇄합니다. 설계 단계에서 tqrband 구성 요소의 높이가 조정되면 수직선 파괴 또는 과도한 길이가 없습니다.
PrintBand가 Pretor Print 밴드로 제어되면 DetailBand1의 이전 이벤트에서 각 장치의 주요 범주 이름은 각 모델에 해당하는 주요 범주 이름이 아닌 한 번만 인쇄 할 수 있습니다. DLBH 필드의 값은 0보다 크기 때문에 BH의 초기 값은 0으로 설정되어 모든 레코드의 DLBH 필드의 값과 다르기 위해 첫 번째 주요 클래스 이름이 인쇄되도록합니다. . 이는 여러 데이터 테이블에서 데이터를 추출하고 테이블 라인이있는 데이터 보고서를 생성합니다.
참고 :이 예제의 프로젝트 파일은 sbgl.dpr이며 원래 프로그램 파일은 Main.pas 및 sbrep.pas입니다. 테스트하려면 dlbmk.dbf, sbxhk.dbf 및 bmsbk.dbf를 배치하십시오. D :/SB 디렉토리에서.