From YYpBD's MediaWiki
제 목:[강좌] 퀵리포트 실전입문 01 관련자료:없음 [1369]
보낸이:김병희 (k8z7 ) 2000-01-24 04:40 조회:468 추천:1
---------------------------------------------------------------------------
[[강좌] 퀵리포트 실전입문 01
k8z7 올림, 2000년 1월 24일 월요일 오전 4시 37분
---------------------------------------------------------------------------
퀵리포트는 물론 한계도 있겠지만 강력한 기능을 가지고 있다.
그러나 초보자를 위한 현실적인 참고자료는 찾아보기 어렵다.
초보자로서 한참 헤맨 끝에 실전적인 도움말을 정리한다.
우선 이번에는 기본적인 밴드 및 컴포넌트 사용법을 다룬다.
기회가 되면 페이지 디자인에 관해서도 정리할 필요가 있다.
데이터베이스와 연결시키는 안내는 당연히 필요하다.
도움말이 필요한 분은 연락을 주기 바란다.
모르는 것은 공부해서라도 강좌로 올릴 의향이 있다.
1. 새 폼
언제든지 프로젝트는 새 폼으로부터 시작한다.
실습도 마찬가지이다.
프로젝트를 새로 시작하든지, {File - New Form}으로 새 폼을 연다.
폰트를 열어보면 = MS Sans Serif, 8포인트임을 알 수 있다.
2. 테이블, 데이터소스
테이블을 올린 후에는 (1)DatabaseName (2) TableName (3) Active 차례로 설정한다.
데이터소스를 올린 후에는 (1) Dataset(테이블컴포넌트의 델파이 Name)을 선택한다.
이번에는 데이터베이스 연결을 다루지 않지만, 기본적으로 언급한 것이다.
3. 퀵리포트/이하 팔레트의 퀵리포트 페이지에서 가져온다.
폰트를 열어보면 = Arial, 10포인트임을 알 수 있다.
* 퀵리포트는 폼의 폰트를 상속하지 않는다.
퀵리포트를 올려둔 후에는 (1) Dataset(테이블 또는 쿼리)을 연결해 주어야 된다.
오늘은 데이터베이스 연결 없이도 이후의 실습이 모두 가능하다.
* 다른 폰트 사용이 필요하면, 퀵리포트의 폰트를 바꾸고 시작하는 것이 좋다.
4. 디테일밴드
퀵리포트의 Bands/HasDetail 속성을 true로 바꾸면 간편하게 디테일밴드를 만들 수
있다.
만들어진 디테일밴드를 클릭하면, 오브젝트 인스펙터에 나타난다.
폰트를 열어보면 = Arial, 10포인트 = 퀵리포트를 상속함을 알 수 있다.
기본적인 사용에는 달리 설정해 줄 것이 없다.
디테일밴드의 폰트를 바탕체, 13포인트로 바꾸어 보자.
5. Child밴드
디테일밴드의 HasChild 속성을 true -> 디테일밴드 아래에 차일드밴드가 붙는다.
차일드밴드는 Parent밴드 밑에 따라붙게 만들어진다.
* Child밴드는 밴드의 내용을 수직으로 연결, 확장할 때 유용하다.
폰트를 열어보면 = Arial, 10포인트 = 퀵리포트를 상속함을 알 수 있다.
<기억> 디테일의 Child인데도 디테일이 아닌 퀵리포트를 상속하다니...
Child밴드의 폰트를 바탕체, 13포인트로 바꾸어 보자.
Child밴드의 HasChild 속성을 true -> 디테일밴드 아래에 차일드밴드가 붙는다.
* 이런 식으로 Child밴드를 계속 이어붙일 수가 있다.
<기억> 이번에도 폰트는 퀵리포트를 직접 상속한다.
6. TQRMemo( 퀵리포트 메모 컴포넌트 )
팔레트에서 QRMemo 하나(QRMemo1)를 디테일밴드에 올리자.
7. Top, Left, Lines 속성
QRMemo1의 Top(0), Left(0)으로 설정하면 밴드 왼쪽 위로 붙는다.
* 밴드에 올려진 컴포넌트의 위치는 밴드에 대한 상대위치이다.
QRMemo1의 AutoStretch(true) 설정하자.
* AutoStretch는 기본 false인데, 이 상태에서는 리포트에 1줄밖에 출력되지 않는다
.
8. 메모 / Lines 속성
모든 종류의 메모 컴포넌트에서는 Lines 속성에 내용을 담게 되어 있다.
Lines의 String List Editor를 열고, 반 페이지 조금 못될 텍스트를 복사해 넣자.
* 편하게 사용하는 워드나 에디터로부터 복사하여 붙이면 된다.
리스트 에디터에서 Esc를 눌렀다가, 다시 에디터를 열어보면 빈 껍데기이다.
다시 복사를 붙이고, [OK]로 닫자.
9. 컴포넌트 복사하여 붙이기
반복되는 동일한 작업, 거의 유사한 작업은 최대한 줄이는 것이 건강에도 유익하다.
10. 메모 컴포넌트 복사
QRMemo1을 복사(^C)한 후, ChildBand1에 붙이면(^V) QRMemo2가 생기고, ChildBand2
에 또 붙이면 QRMemo3가 생길 것이다.
* 복잡한 설정이 필요한 컴포넌트는 하나 만들어서 복사하여 붙이면 간편하다.
11. 밴드 복사
ChildBand1, ChildBand2를 차례로 클릭하고 <Delete>를 눌러 모두 지워버리자.
디테일밴드를 클릭한 후 복사(^C)하자.
한 번 붙이면(^V), 디테일밴드 위로 QRBand1이 만들어진다.
다시 한 번 붙이면(^V), QRBand1 위로 QRBand2가 만들어진다.
차례대로 메모를 선택하고 Lines를 열어 '2', '1', '디테일' 표시를 해 두자.
퀵리포트(밴드를 선택하면 안됨)에서 오른클릭, Preview를 해 보자.
* 둘 이상의 디테일밴드가 있으면, 맨 위(여기서 '2')의 디테일만 보고서 출력된다.
12. 밴드 / ForceNewPage 속성
QRBand1, QRBand2를 지우고, Child1, Child2를 다시 만들며 메모도 복사하자.
이제 프리뷰를 보면 디테일, Child1, Child2 차례로 연속해서 출력이 될 것이다.
Child1밴드를 클릭하고 ForceNewPage 속성을 true로 바꾸자.
* 어떤 밴드이든지 새 페이지에 인쇄하려면 ForceNewPage 속성을 이용한다.
이제 프리뷰를 보면 1페이지에 디테일, 2페이지에 Child1이 출력된다.
13. SubDetail 밴드
팔레트에서 SubDetail 밴드 하나를 퀵리포트에 올리자.
* 서브디테일은 하나의 퀵리포트에 무제한 허용되며, 모두 출력된다.
14. SubDetail / Dataset 설정
디테일밴드에는 없지만, 서버디테일에는 Dataset 속성이 있다.
디테일은 퀵리포트의 Dataset을 따라가지만, 서브디테일은 독립성이 있다는 말이다.
* 서브디테일은 퀵리포트와 별도의 Dataset을 가질 수 있다.
서브디테일을 올려둔 후에는 (1) Dataset(테이블 또는 쿼리)을 연결해 주어야 된다.
15. 서브디테일 복사
다른 밴드의 메모 컨트롤을 복사하여 서브디테일에 붙여넣자.
이제 디테일, Child1, Child2 차례로 다 지워버리자.
QRSubDetail1을 복사, 두 번 붙이면 QRSubDetail2, QRSubDetail3이 차례로 생긴다.
프리뷰를 보면 모든 서브디테일이 출력되는 사실을 알 수 있다.
16. 그룹밴드
QRSubDetail3에서 Bands/HasFooter, HasHeader 속성을 모두 true로 바꾸자.
그러면 Group Header, Group Footer 밴드가 QRSubDetail3의 위/아래로 생길 것이다.
* 서브디테일은 그룹헤더, 그룹푸터를 붙여서 그룹밴드로 만들 수 있다.
17. QRLabel1( 퀵리포트 레이블 컴포넌트 )
레이블 컴포넌트 하나를 그룹헤더밴드에 올리자.
AutoSize 속성(기본 true)을 false로 바꾸자.
Width를 300으로 바꾸자. -> 레이블의 폭이 늘어난다.
레이블 컴포넌트의 캡션에 '이것이 제목이다'를 입력 -> 레이블 왼쪽에 나타난다.
18. Alignment, AlignToBand 속성
레이블 컴포넌트의 Alignment 속성을 taCenter로 바꾸자.
'이것이 제목이다'가 레이블 한가운데로 모여 보일 것이다.
레이블의 AlignToBand 속성을 true로 바꾸자.
레이블 자체가 밴드의 한가운데로 이동할 것이다.
레이블의 Alignment 속성을 taLeftJustify로 바꾸자.
레이블이 밴드의 왼쪽에 붙고, 그 내용도 레이블의 왼쪽으로 붙는다.
레이블의 Alignment 속성을 taRightJustify로 바꾸자.
레이블이 밴드의 오른쪽에 붙고, 그 내용도 레이블의 오른쪽으로 붙는다.
레이블의 폰트를 돋움체, 25포인트로 바꾸자.
19. 그룹헤더의 디자인높이
이제 프리뷰를 보면, 내용은 다 나오는데 레이블에 쓴 제목 아래가 잘려서 보인다.
그 모양은 디자인시에 우리가 화면에서 본 모양이다.
메모는 Autostretch 속성을 true로 바꾸었을 때 다지인 화면에 다 나타나지 않아도,
프리뷰에서 모든 내용이 다 출력되었는데, 그 속성을 false로 두어서 그럴까?
레이블의 Autostretch 속성을 true로 바꾸고 프리뷰해도 결과는 마찬가지일 것이다.
* 그룹헤더밴드는 디자인시의 높이대로 출력된다.
그룹헤더밴드의 Height에 100이나 적당한 크기를 주자.
레이블의 Top을 보기 적당한 위치로 이동시키자.
이제 그룹헤더밴드의 ForceNewPage을 true로 주고 다시 프리뷰해보라.
20. 그룹푸터 디자인
그룹헤더의 레이블을 복사, 그룹푸터에 붙이고, 왼쪽정렬, '여기가 끝이다.'로.
디자인시에 레이블이 보이지 않도록 헤더 높이를 줄이자.
이제 프리뷰해 보라. 그래도 프리뷰에 정상으로 나타날 것이다.
* 디자인시의 밴드높이는 그룹헤더에서만 출력시에 영향을 미친다.
21. Child밴드와 그룹푸터
SubDetail3(그룹본체)밴드를 클릭하고 HasChild 속성을 true로 바꾸자.
그러면, 헤더/본체/Child/푸터 순서로 보일 것이다. 그대로 출력된다.
22. LinkBand, Frame 속성
LinkBand 속성은 앞뒤의 밴드를 같은 페이지에 출력하게 하는 것이라고 한다.
그러나, 연습을 해 보았는데 무언가 잘 되지 않았다.
정확하게 아는 분이 있으면 가르침을 기다린다.
프레임 속성을 펼쳐보면 밴드에 테두리나 아래선 등을 줄 수 있음을 알 수 있다.
23. 잔소리
이 정도만 알면, 퀵리포트에 관해 막연한 거리감은 없어질 것이다.
내가 이 정도 정리하기까지, 며칠이지만, 사람을 만나 자문하고 자료실을 뒤지고 델
파이 온라인 헬프를 베끼며 번역하고, 델파이 샘플 프로그램을 분석하고 ...
이루 다 말할 수 없지만, 아직 수박 겉핥기에 불과함을 절감한다.
내게 진전이 있는 대로, 후배들을 위한 강좌를 남기고 싶다.
---------------------------------------------------------------------------
[강좌] 퀵리포트 실전입문 01
2000년 1월 24일 월요일 오전 4시 38분
k8z7@hitel 김병희 ( 017 - 264 - 4995 )
---------------------------------------------------------------------------
제 목:[강좌] 퀵리포트 실전입문 02 관련자료:없음 [1387]
보낸이:김병희 (k8z7 ) 2000-02-18 00:14 조회:393 추천:1
---------------------------------------------------------------------------
[[강좌] 퀵리포트 실전입문 02
k8z7 올림, 2000년 2월 18일 금요일 오전 0시 10분
---------------------------------------------------------------------------
비파툴 2월 세미나에 참석하여 슈베르트(양병규)님의 강좌를 들었더니, 원고로만 보
았을 때보다 생생한 이해를 얻을 수 있었다. 핵심은 간단하지만, 그 간단한 핵심을
찍어서 설명해 줄 수 있는 보배가 비파툴에 살아 있다는 사실에 감사하자.
듣고 이해는 해도 막상 스스로 구현하려면 항상 쉽지만은 않다.
내가 가끔 자문을 구하는 다른 개발자는 퀵리포트 예찬론자이다.
슈베르트님은 퀵리포트는 아예 모르니 질문도 하지 말라고 했다.
슈베르트님과 그 고수 사이에서 나는 한참 헷갈렸다.
양쪽 다 깊이 접근해 보면, 나름대로의 결론이 나오겠지.
우선 급한 일은 퀵리포트로 처리하고 있다.
그런데 어려운 문제에 부딛쳤다.
Q. 퀵리포트에서 같은 줄에 마스터와 디테일을 출력할 수 있는가?
A. 있다. 있을 것이다. - 있는 것은 뭐고, 있을 것은 뭔가?
1) 마스터-디테일 연결 방법
로컬 디비인 파라독스로도 마스트-디테일을 당연히 구현할 수 있다.
어떤 참고서에나 나올 것이지만, 간단히 정리해 보자.
물론 새 프로젝트를 시작해야 마구잡이로 편안하게 연습할 수 있다.
마스터 : 고객번호(Key), 이름, 주민번호, 주소
- 메인폼에 -> Table1(앨리아스, 테이블이름, 액티브:=true)
- 메인폼에 -> DataSource1(데이터셋=Table1)
* 나보다 좀 더 친절한 분은 앨리아스를 DBDEMOS, 테이블이름을 customer.db 등으로
일러주고 뒤에 가서 조인할 필드 이름까지 구체적으로 언급할지 모른다. 나는 내
프로젝트에서 실전에서 경험한 것을 바탕으로 설명하므로 시간에 쫓긴다.
디테일 : 주문번호(Key), 고객번호(Foreign), 날짜, 품명, 수량, 금액
- 메인폼에서 Table1 복사하여 붙이기 -> Table2(앨리아스까지 복사된다)
- Table2(테이블이름, 마스터소스=DataSource1, MasterFields, 액티브:=true)
* 위 예에서는 고객번호를 MasterFields로 연결시켜야 될 것이다.
* 그러나, 다른 예제에서는 메인폼의 Key가 아닌 필드로도 연결이 가능하다.
2) 퀵리포트 디자인( 뭐 디자인이라는 말음 부담스럽지만 )
- 메인폼에 -> TQuickRep1(데이터셋=Table1)
- 퀵리포트의 Bands 속성 (+) 클릭 -> (-)로 변하면서 확장된다.
- Bands/HasDetail 속성 := true -> 디테일밴드 출현
3) 한 줄에 마스터 필드와 디테일 필드 출력하기
- 디테일밴드에 -> TQRExpr1(Master := QuickRep1)
- TQRExpr1의 Expression 엘립시스버튼 클릭 -> <Expression 마법사> 창
- [Database field] 버튼 클릭, Table1/고객번호 클릭, [OK], [OK]
* TQRExpr1의 캡션이 "Table1.고객번호"로 바뀌어 보인다.
- TQRExpr1 복사하여 붙이기, <Ctrl + Shift + Right>로 분리시키면 TQRExpr2 출현
- TQRExpr2(Expression := Table2.금액)
- 퀵리포트의 가장자리(밴드 바깥쪽 여백)에서 마우스 오른클릭, Preview 클릭
성공이다. 분명히 같은 줄에 마스터 필드와 디테일 필드를 보여줄 수 있었다.
그런데 조금 발전하면, 새로운 문제에 부딛친다.
4) 데이터모듈 사용
고수들은 데이터모듈을 권장하는 것 같다.
고수들의 권장에는 반드시 이유가 있다고 믿고 일단 따르는 것이 좋다.
- File/New 메뉴에서 데이터 모듈 선택 -> unit2와 데이터모듈 폼이 열린다.
- F12, unit1 클릭, F12 -> 메인 폼이 나타난다.
- Table1, Datasource1, Table2 잘라서 데이터모듈 Components 페이지에 붙인다.
- 메인폼에서 <Alt + F11>하여 unit2를 uses절에 추가
- 퀵리포트(Dataset := DataModule2.Table1)
* 위에서 테이블, 데이터소스를 자르는 순간 날아갔으므로, 새로 지정해야 된다.
- 퀵리포트의 가장자리(밴드 바깥쪽 여백)에서 마우스 오른클릭, Preview 클릭
실패다. Table1.고객번호는 제대로 출력되는데, Table2.금액은 어떤가?
Unknown function : Table2.Price
대충 이런 식으로 나타날 것이다.
5) 초보의 고민
이런 문제로 고수에게 전화를 걸었다.
어쩌구 저쩌구, 이런 저런 과정으로 했는데 안 되더라.
그렇게 했으면 안될 리가 없는데?
그래도 안 된다. 내가 무엇을 잘못 했는가?
보지 않고 말만 들어서 내가 어떻게 아냐?
서로 바쁘니, 부득이하게 짜증도 나게 된다.
그렇다고 매일 고수를 찾아 출근할 수도 없다.
문제는 퀵리포트에서 Dataset을 하나밖에 지정할 수 없다는 점이다.
그러니 퀵리포트에 연결되지 않은 데이터셋.필드는 Unknown finction이라고 불평하
는 것을 우리가 나쁘다고 할 수 없는 것이다.
6) 서브디테일의 매력
사무실에서 고수와 통화하고도 해결하지 못한 문제였다.
집에 와서도 바로 잠이 올 수가 없다.
- 퀵리포트 팔레트에서 서브디테일 컴포넌트 하나를 가져다가 퀵리포트에 올린다.
- 서브디테일(Dataset := DataModule2.Table2)
- 퀵리포트의 가장자리(밴드 바깥쪽 여백)에서 마우스 오른클릭, Preview 클릭
야! 성공이다. 그런데 절반의 성공이다.
줄 사이의 간격이 너무 벌어지기 때문이다.
7) 편법
- 서브디테일(Height := 0)
이렇게 하면 줄 사이의 간격이 벌어지지 않는다.
그런데, 이것은 편법이다.
* 사실은 이 편법은 올리기 위해 원고를 만들면서 생각해낸 것이다.
8) 결론
- 서브디테일(Height := 40) // 기본 높이가 40이다. 마음대로 바꿀 수 있다.
* 높이가 0이라서 선택하기 힘들면, 오브젝트 인스펙터에서 집어내면 된다.
- 디테일의 QRExpr1, QRExpr2 잘라서 서브디테일에 붙이기
그런데. 이렇게 해도 줄 사이의 간격이 벌어지네?
- 디테일(Height := 0)
결론은 다음과 같이 내리자.
한 줄에 마스터와 디테일을 혼합해서 출력하려면
- 서브디테일에서 디테일 밴드를 연결시키는 것이 핵심이라고 느껴진다.
- 출력하지 않을 밴드는 높이를 0으로 지정한다.
- 줄 간격을 조정하려면 밴드의 높이를 조정하면 된다.
- 퀵레이블, 퀵엑스퍼 등의 왼쪽, 오른쪽, 가운데 정렬 등은 설명을 피한다.
9) 마치면서
초보자가 글을 올릴 때마다 한편 두려운 마음을 금할 길 없다.
최선은 따로 있는데 엉뚱한 경험을 알리는 우를 범하지는 않는가?
그러나, 필요하면 당장 만들어야 된다.
실력이 쌓이면 최선을 향하여 개선할 수 있을 것이다.
꿩 잡는 게 매다!
이 짧은 원고를 정리하는 사이에 자정이 넘어 버렸다.
한 시간 이상이 걸린 것이다.
열심히 올리고, 열심히 답해주는 선배들에게 감사한 마음을 전한다.
아무리 초보용이라지만, 너무 길게 쓰기는 좀 이상하다.
만약 이해되지 않고 필요하면, 질문을 기다리겠다.
먹고 살기 바빠서 통신에 자주 못 들어가니까, 급하면 전화 주시기 바란다.
---------------------------------------------------------------------------
[강좌] 퀵리포트 실전입문 02
2000년 2월 18일 금요일 오전 0시 12분
k8z7@hitel 김병희 ( 017 - 264 - 4995 )
---------------------------------------------------------------------------