Q&A

  • QReport에서 필드값이 같으면

안녕들하세요

QReport에서 필드값이라고 해야하나?
--------------                         --------------
|종류| 음식명|                          |종류| 음식명|
--------------                         --------------
| 중식| 짜장면|                         | 중식| 짜장면|
--------------                                  --------
| 중식| 울면   |      ======>        |       | 울면   |
--------------                                  --------
| 중식| 짬뽕   |                         |       | 짬뽕   |
--------------                                  --------
| 중식| 우동   |                         |       | 우동   |
--------------                          --------------

대충 알아보시겠죠..^^;;; 퀵레포트 상에 위와 같이 출력이 될 경우

'종류' 필드에 중식이 반복해서 출력이 되는데

저부분은 첫 Row에만 중식이 나올수 있게 하고 아래로는 안보이게 내지는 삭제할수는 없는지요

라인도 포함해서 가능한지...

가능하다면 어떻게 해야하는지 문의드립니다..

답변 부탁드립니다. 그럼 이만.



4  COMMENTS
  • Profile
    아폴론 2002.09.30 22:55

    QuickReport에서는 안되는 것으로 압니다.
    노가다를 좀 하면 됩니다.
    종류부분의 디테일밴드 부분은 QRShape으로 디자인 합니다.

    종류       음식명

    -  -  -    --------------------------------
    중식      |     짜장면
    -  -  -    ---------------------------------

    위에서 -  -  - 부분은 큐알샾으로   .... 감추어야 되니깐여...
    디테일밴드의 Befor, After에서 적당히 비교해서 감추고 나타내 주면 됩니다.
    상당히 비 능율적인데.... 안되니까...저렇게 노가다 라도 하면 됩니다.
    이궁 죄성하네요...
  • Profile
    김상수 2002.10.01 01:48


    답변 감사합니다..

    노가다 작업일꺼라 예상했습니다.

    음...그런데  if구문을 사용할때

    종류에 첫row와 다음 row를 비교하려면 어떻게 코딩을 해야하는지...

    답변 부탁드립니다...그럼 이만..
  • Profile
    아폴론 2002.10.01 04:36

    먼저 종류의 값이 들어갈 변수를 전역으로 선언합니다.
    현재 종류의 값이 들어갈 변수도 선언 합니다.
    var oldnm : strring; ==>
         hldnm : string;

    출력폼이 Create되면서 oldnm변수에 임의으 값을 줍니다.
    procedure TFmprint.FormCreate(Sender: TObject);
    begin
       oldnm := 'aaaa';  
    end;

    procedure TFmprint.QRBand3BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    begin  
       //
       hldnm := Query1.FieldByname('종류').asstring;
      
       //처음 oldnm에는 'aaaa'가 있으니 거짓이됩니다.
       //그러면 종류가 나타날 QRDBText를 숨깁니다. 저는 Width를 0으로 ...
       if oldnm = hldnm then
          QRDBText15.Width := 0;

       //아래 는 참이되고  그러면 종류는 나타내야되고
       //QRDBText를 감추지 않으면 됩니다.
       if oldnm <> hldnm then
          oldnm := Query1.FieldByname('종류').asstring;
      
    end;
    에궁 설명 할려니 그렇네...
    그냥 제 허접 소스 올려드릴테니 잘 다듬어서 사용 해 보세요..
    제 허접소스 갑니다.

    implementation

    uses ma2101;
    var key2 :string;
        oldkey1,oldkey2 : string;
        hdkey1,hdkey2,hdkey3 : string;
    {$R *.DFM}

    procedure TFm2101rp.QRBand3AfterPrint(Sender: TQRCustomBand;
      BandPrinted: Boolean);
    var ii : string;
        i : integer;
        QRText : TQRDBText;
    begin
        key2 := '';
        for i := 1 to 13 do begin
            ii := inttostr(i);
            QRText := FindComponent('QRDBText' + ii)as TQRDBText;
            QRText.Color := clWhite;
        end;
        QRDBText15.Width := 76;
        QRDBText16.Width := 59;
        QRShape34.Width := 0;
        QRShape35.Width := 0;
        hdkey1 := '';
        hdkey2 := '';
        hdkey3 := '';
    end;

    procedure TFm2101rp.QRBand3BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    var ii : string;
        i : integer;
        QRText : TQRDBText;
    begin
       key2 := Fm2101.SQL2101.FieldByname('T_key2').asstring;
       if key2 = 'Z' then begin
          for i := 1 to 13 do begin
              ii := inttostr(i);
              QRText := FindComponent('QRDBText' + ii)as TQRDBText;
              QRText.Color := clSilver;
          end;
       end;
       hdkey1 := Fm2101.SQL2101.FieldByname('T_key1').asstring;
       hdkey2 := Fm2101.SQL2101.FieldByname('T_key2').asstring;
       hdkey3 := Fm2101.SQL2101.FieldByname('T_key3').asstring;
       if oldkey1 = hdkey1 then
          QRDBText15.Width := 0;
       if oldkey2 = hdkey2 then
          QRDBText16.Width := 0;

       if oldkey1 <> hdkey1 then
          oldkey1 := Fm2101.SQL2101.FieldByname('T_key1').asstring;
       if oldkey2 <> hdkey2 then
          oldkey2 := Fm2101.SQL2101.FieldByname('T_key2').asstring;

       if hdkey3 = 'B' then begin
          QRShape35.Width := 68;
          QRShape35.Top := 16;
       end;
       if (hdkey2 = 'Z') and (hdkey3 = 'B') then begin
          QRShape34.Width := 85;
          QRShape34.Top := 16;
       end;
    end;

    procedure TFm2101rp.FormCreate(Sender: TObject);
    begin
       oldkey1 := 'aaaa';
       oldkey2 := 'aaaa';
       hdkey1:= ''; hdkey2:= ''; hdkey3 := '';
       QRShape34.Width := 0;
       QRShape35.Width := 0;
      
    end;

    procedure TFm2101rp.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
       Action := caFree;
    end;





  • Profile
    김상수 2002.10.01 04:45