Q&A

  • 크리스탈 레포트에 값이 하나밖에 안 나와요...ㅜㅜ
도움을 청합니다..

저는 지금 델7, 크리스탈 9를 사용중입니다.
많은 어려움 끝에 델파이에서 크리스탈 리포트 뷰어에 값을 뿌려줄수 있었습니다
그러나....
여러개의 값을 뿌려줘야 하는데....
마지막 한개 값밖에 보여주질 않습니다.

<!--CodeS-->
  Application1:= CRAXDDRT_TLB.TApplication.Create(self);
   FileName := ExtractFilePath(Forms.Application.ExeName);
   FileName := FileName + 'Report2.rpt';
   CrReport := Application1.OpenReport(FileName,crOpenReportByTempCopy);
   CrReport.EnableParameterPrompting := false;
   CrReport.DiscardSavedData;

   Query1.Close;
   Query1.SQL.Clear;
   Query1.SQL.Add('select * from c_customer ');
   Query1.Open;

   while not(Query1.Eof) do begin
      CrReport.FormulaFields.Item[1].Text :=''''+Query1.fieldByName('customerid').AsString+'''';
   CrReport.FormulaFields.Item[2].Text :=''''+Query1.FieldByName('mk_csrid').AsString+'''';
   CrReport.FormulaFields.Item[3].Text :=''''+Query1.FieldByName('company_address1').AsString+'''';
   CrReport.FormulaFields.Item[4].Text :=''''+Query1.FieldByName('e_mail1').AsString+'''';
   CrReport.FormulaFields.Item[5].Text :=''''+Query1.FieldByName('e_mail2').AsString+'''';
   Query1.Next;
    end;
<!--CodeE-->

총 6개의 Row가 나와야 하는데... 마지막 값을 가진 한개의 Row만 나옵니다..
고수님들....부탁드립니다~~~
도와주세요~~~
4  COMMENTS
  • Profile
    프로글래머 2005.08.30 01:53
    이건 정답이 아닐지도 모르니 큰 기대는 하지 마시기 바라며 ...

    아래 소스만을 기준으로 한 답변 입니다.
    얼른 소스를 보니 눈에띄는게 현재레코드의 위치가 어디인가 하는것 입니다.
    소스에 while 시작전에 Query1.First; 를 해 줘 보시지요.

  • Profile
    조진희 2005.08.30 02:10



    여러번 답변 해 주셔서 정말 감사합니다.

    디버깅도 해 보고 말씀하신것도 해 보았으나 여전히
    한개의 Row만 보입니다.
    크리스탈 리포트가 혹시 배열인 아닌걸까요?
  • Profile
    프로글래머 2005.08.30 02:58
    가만 생각해 보니 저의 위 답변은 아주 잘못된 답변이네요. 괜히 기대만 드리고 ...

    이 부분을 좀 생각해 보셨는지요 ?
    출력을 할 때 크리스탈은 출력할 자료들을, 프로그램에서 필터링을 하거나 쿼리한 자료들을
    하나씩 넘겨받아 출력을 하는건지, 아니면 크리스탈에서 필터링을 위한 자료까지 넘겨받아
    크리스탈이 직접 필터링 또는 쿼리를 한 후 결과로 출력을 하는건지를 살펴보시기 바랍니다.

    도움이 안되는소리만 자꾸 해서 죄송합니다만 예전 기억에 6 에서는
    SelectionFormula 라고 해서 그것을 넘겨주면 크리스탈이 필터링해서
    출력했던 것으로 기억이 되어서 말씀입니다.

    위의 소스에는 크리스탈의 Execute 명령부분이 없는데 그것은 쿼리한 후에 코딩이 되어있나요 ?
    그것이야 어찌 되었건 위 소스에서 프로그램의 흐름을 보면 출력에 해당하는 자료 여섯건이 어떻게 출력에
    전달이 되어 출력을 실행하는지를 잘 모르겠습니다.

    크리스탈의 Execute 명령부분이 쿼리한 후에 코딩이 되어있다면, 크리스탈에서 출력할 때
    무조건 첫번째 레코드부터 출력하는것이 아니라면 마지막 레코드만 출력할 수 밖에 없을것 같고요

    아무튼 제가 코드부분을 볼 때 로직상 모든 레코드를 출력할 수는 없을것으로 보이고 있습니다.

    출력을 셋팅하고 -> 필터링을 하고 -> while 문 때문에 현재레코드는 Last  상태로 되었고 ->
    그런다음에 출력 Exec 한다.

    이런 흐름으로 보이니까 도저히 전체 레코드가 출력될 수가 없어 보입니다.

    앞으로는 확신이 없으면 정말로 정답이 아닌 답변으로 혼란을 드리지 않겠습니다.
  • Profile
    조진희 2005.08.30 03:15
    정말 정말 감사 드립니다...

    어떤 말이라도 제게는 혼란이라기보다
    한번더 생각해 볼수 있는 기회가 되니까 앞으로도 많은 부탁 드리겠습니다!!!!^^

    그리고 말씀하신거는 한번 생각해봐야 할꺼 같습니다..

    정말로 감사 드립니다!!!