Q&A

  • 역시 잘 안되네요..
**************************************************************
>>얼마전에 아래와 같은 질문을 올렸습니다.
**************************************************************
리스트박스에 500건정도의 리스트가 있습니다.
여기서 프린트하고 싶은 리스트만 골라서 프리뷰를 합니다.

그리고 그 중에서 일부만 실제 프린트를 합니다.

이때, 실제 프린트한 종이의 어떤 항목의 data값을 얻고 싶어서
다음과 같이 했습니다.

procedure Tprint_seikyuu_data.QuickRep1AfterPrint(Sender: TObject);
begin
showmessage(DM.Query1.FieldByName('TOKUISAKICD').AsString);
end;

근데, 여러 이상한 현상이 발생합니다
예를들어,
3장을 실제 프린트했는데, 마지막 종이의 data값만 출력되거나
또 어떤때는
리스트박스에서 선택하지도 않은 전혀 엉뚱한 data값이 나옵니다.

왜 그런가여?
해결하려면 어찌해야 하나여?

**************************************************************
>>그래서 아래와 같은 답변을 얻었습니다.
**************************************************************
원하시는 결과가 무엇인지 모르겠지만
퀵리포트 컴포넌트에서 AfterPrint는 모든 출력을 마친 후에 실행되는 이벤트 입니다.
그렇기 때문에 마지막 장에서 결과가 한 번 뜨는 것이 옳기 때문에 그런 현상이 발생한 것 같습니다.
원하는 값이 들어 있는 밴드에 AfterPrint 이벤트를 사용하세요.


**************************************************************
>>그래도 역시 같은 현상이 일어납니다.
**************************************************************
답변주신 분의 말씀대로 했는데도(A부분)
여전히 같은 현상이 발생하네여.
혹시나 도움이 될까 해서 소스까지 같이 올려봅니다.
죄송하지만 좀 봐 주세여.

참고로 sql문이 실행, open된 상태에서 report를 프리뷰하고 있습니다.
또 밴드는 rbPageHeader(얻고 싶은 값필드가 있는 밴드입니다), rbDetail,
rbPageFooter의 3개를 사용하고 있습니다


**************************************************************
>>아래는 소스입니다
**************************************************************
.....

    zankin4: TQRLabel;
    QRBand3: TQRBand;
    QRShape12: TQRShape;
    procedure QuickRep1BeforePrint(Sender: TCustomQuickRep;
      var PrintReport: Boolean);
    procedure QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
    procedure QRBand2BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    procedure QRBand1BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
  private
    { Private 宣言 }
  procedure pageheaderset;
  public
    { Public 宣言 }
    nenngetudo,hansya_addr,hansya_tel,hakkoubi:string;
    tcode:string;
    udate:string;
  end;

var
  print_seikyuu_data: Tprint_seikyuu_data;
  firstexecute:integer;
  tokuisakicd_betu_datacnt:integer;
  tokuisakicd_betu_pagenum:integer;

implementation

uses DataM;

{$R *.DFM}

procedure Tprint_seikyuu_data.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin

  firstexecute := 0;
  tokuisakicd_betu_datacnt:=0;
  tokuisakicd_betu_pagenum:=1;

  DM.M_Query1.First;

  if not DM.M_Query1.EOF then PrintReport := True
  else PrintReport := False;

  tcode := DM.M_Query1.FieldByName('TOKUISAKICD').AsSTRING;
  udate :='2999';

end;

procedure Tprint_seikyuu_data.QuickRep1NeedData(Sender: TObject;
  var MoreData: Boolean);
begin

  inc(firstexecute);
  inc(tokuisakicd_betu_datacnt);

  if not DM.M_Query1.EOF then MoreData := True
  else MoreData := False;

end;

procedure Tprint_seikyuu_data.QRBand2BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin

  with DM.M_Query1 do
  begin

    if (tcode <> DM.M_Query1.FieldByName('TOKUISAKICD').AsString) then
    begin
      tokuisakicd_betu_pagenum :=1;
      tokuisakicd_betu_datacnt :=1;
      QuickRep1.NewPage;
    end

    //
    if trim(FieldByName('uriagebi').asstring)='' then
    begin
      uriagebi.Caption := '' ;
      udate := '2999';
    end
    else
    begin
      if udate = trim(FieldByName('uriagebi').AsSTRING) then
        uriagebi.Caption := ''
      else
        uriagebi.Caption := FieldByName('uriagebi').AsSTRING;
      udate := trim(FieldByName('uriagebi').AsSTRING);
    end;
    //
    if FieldByName('code').asstring='' then
      code.Caption := ''
    else
      code.Caption := FieldByName('code').AsSTRING;
    //
    if FieldByName('itemname').asstring='' then
      itemname.Caption := ''
    else
      itemname.Caption := FieldByName('itemname').AsSTRING;
    //
    if firstexecute =1 then
    begin
      pageheaderset;
    end;

  end;

  PrintBand := True;
  DM.M_Query1.Next;

end;

procedure Tprint_seikyuu_data.QRBand1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin

  if (firstexecute <>1) then
  begin
    if (tcode <> DM.M_Query1.FieldByName('TOKUISAKICD').AsString) then
      pageheaderset;
  end;

end;

procedure Tprint_seikyuu_data.pageheaderset;
begin

  with DM.M_Query1 do
  begin
    YUBIN_NO.Caption := FieldByName('post').AsSTRING;
    address1.Caption := FieldByName('addr1').AsSTRING;
    kanji1.Caption := FieldByName('KANJI1').AsSTRING;
    number.Caption := FieldByName('renbannumber').asstring ;
    H_address.caption := hansya_addr ;
    tel.caption       := 'TEL.'+hansya_tel ;
    zankin1.caption := formatfloat('#,##0',FieldByName('tougetuseikyu').asinteger) ;
    zankin2.caption := formatfloat('#,##0',FieldByName('jengetuseikyu').asinteger) ;
    zankin3.caption := formatfloat('#,##0',FieldByName('nyukingaku').asinteger) ;
end;

end;

procedure Tprint_seikyuu_data.QRBand1AfterPrint(Sender: TQRCustomBand;  // A
  BandPrinted: Boolean);
begin
  showmessage(DM.M_Query1.FieldByName('TOKUISAKICD').AsString);
end;


end.
1  COMMENTS
  • Profile
    Crazy 2004.05.05 03:05
    답변이라기 보다는 그럼 아싸리 퀵리포트 폼에 쿼리 하나 두고서
    그 쿼리에 값을 출력할 자료만 넣는것은 어떨지요????
    그후에 해당 필드의 afterprint 이벤트의 값을 해보시면 알수 있을것입니다.

    참고로 필드가 많거나 해서 일일히 하기 귀찮다면 똑같이 복사해서
    필드갯수만큼 루프돌리면 데이타도 쉽게 넣을수 있습니다..

    • 뭉치
    • 2004.05.05 02:39
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박수영
      2004.05.06 17:56
      보통은 DB의 패스워드는 건드리지 않고 user 테이블을 하나 두어서 관리를 하던구요...디비의 패스워드...
    • 정승운
      2004.05.05 02:44
      DB를 외부에 노출시킴으로서 발생되는 문제입니다. 실제로 id나 암호가 노출되는 문제보다 외부에서 직접 ...
    • 미소^^
      2004.05.05 03:59
      ..
    • 이선행
    • 2004.05.05 02:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김철홍
      2004.05.06 19:27
      999\.999\.999\.999;1 마지막 부분에서   .\999;1이 아니고 \.999;1 으로 써야겠지요.
    • 엄문용
    • 2004.05.05 01:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • [勳]후니
      2004.05.06 18:13
      시리얼 통신쪽을 공부 하셔야 할꺼 같네요.. 우선 통신에선 일반적으로 네트워크를 이용하여 소켓 통신...
    • 너구리
      2004.05.05 01:31
      이와 관련된 답변은 많이 있습니다. Sender로 찾으셔도 나올거 같구요.. 아니면 Components로 찾으셔...
    • Crazy
      2004.05.05 02:02
      1) for i := 0 to ComponentCount - 1 do    begin       &nbs...
    • 조우택
    • 2004.05.04 23:30
    • 0 COMMENTS
    • /
    • 0 LIKES
    • help me
    • 2004.05.04 19:07
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김진용
      2004.05.04 22:04
      procedure TForm1.SortStringgrid(Grid: TStringGrid; byColumn: LongInt;  ascending: Bool...
    • help me
      2004.05.05 01:13
    • Crazy
      2004.05.05 02:59
      이건 이해가 가실지??? 델파이코딩이 아니라 pl-sql 이거든요? 로직보시면 아실겁니다. 참고로 p_GUBUNS...
    • 김철홍
      2004.05.04 19:10
      제가 잘은 모르지만 2000이나 XP에서 잘 돌아간다면 그건 OS의 문제가 아닌거 같은데요. 실행시키는데 문...
    • 홍봉기
    • 2004.05.04 17:58
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김철홍
      2004.05.04 17:56
      잘하셨는데요.. 다만 실행시키고 보이지 않는 건  Form Size가 너무 작아서 그런거랍니다. form...
    • 영원한초짜
      2004.05.04 23:31
      우선 잘했다고 칭찬까지 해주셔서 무척 감사드리고 답변주셔서 감사 드립니다 (__*) 그런데 저는 아래...
    • 최용일
      2004.05.05 00:59
      안녕하세요. 최용일입니다. 맨 마지막 줄에서 폼을 띄워주세요... procedure TForm1.FormCreate(Send...
    • 영원한초짜
      2004.05.05 02:35
      질문올리기전 해볼 것은 이것저것 다 해봤는데.. (제가 아는 한도까지 ^^) 왜 안되는지 몇시간동안 델파...
    • 맑은물
    • 2004.05.04 12:19
    • 1 COMMENTS
    • /
    • 6 LIKES
    • Crazy
      2004.05.05 03:05
      답변이라기 보다는 그럼 아싸리 퀵리포트 폼에 쿼리 하나 두고서 그 쿼리에 값을 출력할 자료만 넣는것은 ...
    • 성지현
    • 2004.05.04 04:30
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 프리맨
      2004.05.04 20:12
      Class는 붕어빵 기계(?) 입니다. 여기에 밀가루 반죽(리소스)을 넣고 구으면.. 붕어빵(인스턴스)이 나...
    • 너구리
      2004.05.04 20:40
      붕어빵기계의 상위 클래스 빵기계 클래스가 있습니다. 빵기계 클래스에는 내용물변수와 틀모양변수와 (C...
    • 김민웅
    • 2004.05.04 04:05
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 미러
    • 2004.05.04 02:45
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 프리맨
      2004.05.04 19:39
      StrPos를 써보세요. function StrPos(const Str1, Str2: PChar): PChar; StrPos는 PChar를 사용하기 ...
    • 김철홍
      2004.05.04 18:54
      그냥 허접하게 만들어봤네요. Str이라는 문자열에서 '1'이라는 문자를 찾으려고 할때 3번째 문자의 위치를 ...
    • 김도형
      2004.05.04 02:59
        nPos := pos( 's' , sStr ) + 2; 이렇게 하면 어떨까요 ^^;; 답변이 되지 않았다면 ...
    • 미러
      2004.05.04 03:01
    • 김도형
      2004.05.04 03:21
      procedure TForm1.Button1Click(Sender: TObject); var   sStr : string;   nI...
    • 김도형
      2004.05.04 03:28
      procedure TForm1.Button1Click(Sender: TObject); var   sStr : string;   nI , n...
    • 박수영
    • 2004.05.04 01:51
    • 2 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2004.05.04 02:23
      procedure TForm1.Button1Click(Sender: TObject); var   Rect : TRect; begin   ...
    • 박수영
      2004.05.05 00:18
    • 홍길동
    • 2004.05.03 23:11
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 전대식
    • 2004.05.03 23:09
    • 0 COMMENTS
    • /
    • 0 LIKES