Q&A

  • 퀵리포트에서 20개씩 출력하려면
퀵리포트를 이용해서 출력을 하려합니다
몇일밤을 세우지만 어쩔지를 모르겠군요 대략이라도 꼭 알려주세요~~
파라독스DB를 이용합니다

No    Name    
---   -------
1      Name1
2      Name2
.         .
.         .

등이 있습니다 이것을 20개씩만 한장에 무조건 출력하려는데
어찌하면 좋을까요????

2  COMMENTS
  • Profile
    김경록 2003.09.23 01:49
    작업순서..

    1.  QuickReport의 Dataset Property에는 아무것도 설정하지 않아야 합니다..
    2.  적절히 Query를 만들어 필요한 Data를 조회하는 Sql문을 작성해야 합니다.
    3.  PageHeader, Detail, Summary등등..  각종 Band를 열심히
         QuickReport상에 배치시키고, 필요한 Label등을 Detail에 올려 놓습니다.
    3.  QuickReport의 OnNeedData에서
         Moredata := True를 주어서..
         출력될 해당 Row가 존재한다고 알려 줍니다..
         1 Row를 출력할 내용을 어떻게 어떻게(Label등에 출력등등
         Coding합니다..
         물론, 출력된 수가 21개가 되면, Newpage를 호출합니다..


    이게 끝이에염..
    간단하져?
    혹시 예를 바라십니까?
    직접 Delphi에서 확인한것은 아니지만,
    그 의미는 전달되리라 확신합니다...
    Query1는 QuickReport.Create()부분뒤에
    이미 Open한 후, 사용하시길..
    그리고, QuickReport.Preview
    뭐 하면..
    아래의 OnNeedData Procedure를 타게 됩니다..
    알고나면, 짜증나게 허망하지만,
    여간 Coding하는게 귀찮아져서리..
    님도 그렇게 생각하시는지..
    꼭 한 Page에 몇개를 출력하라고 하는 사람들이 있어서..
    좀 되는데로 보시징..
    (이렇게 생각하면 않되겠졈?   헤헤   *^^* )

    Procedure TQuickReport1.OnNeedData(MoreData: Boolean)
    Begin
         //pl_TotalRowCnt는 전역변수, 출력된 총 Row수를 가진다
         If pl_TotalRowCnt = Query1.RecordCount Then역변수이며
         Begin                                  
              Moredata := False;  //출력할 Detail이 없다.
              Exit;
         End
         else
              Moredata := True;  //"더 출력할 Detail이 있다"고 알려준다.

          QLabel1.Caption := Query1.FieldByName('ID').AsString;
          QLabel2.Caption := Query1.FieldByName('NAME').AsString;
          QLabel3.Caption := Query1.FieldByName('TEL').AsString;

          Inc(pl_TotalRowCnt);
          Query1.Next;

          If (pl_TotalRowCnt Mod 20) = 0 Then NewPage;
    End;

    답이 되었길..
    제가 이런 유형은 99년도에 이미 테스트를 많이 해 봤기 때문에
    의미는 정확할 겁니다..
    Coding이 Error가 날지는 모르겠지만..
    어쨌뜬..
    도움이 되셨길 바랍니다..





  • Profile
    major 2003.09.22 19:03



    전역변수를 이용해서  iCnt라는 Integer형으로 만들어 두시고요..

    글구 Report Before Print 에서 변수를 0으로 클리어를 시키고요..

    글구 마지막으로 디테일밴드에 Before이벤트에 다음과 같이 하시면 될 것 같네요.. 아님 셀렉트를 20개만 하셔두 되구요..

    어쨌든 ...

       inc(iCnt);
       if iCnt > 20 then
          PrintBand : = False
       else
          PrintBand := True;

    뭐 이런식으로 코딩을 하시면 될 것 같네요..

    그럼 즐프하세염..