Q&A

  • 델파이7에서 크리스탈 리포트에 Parameter값 전달하는 방법?
안녕하십니까 델파이7에서 크리스탈9VCL을 설치하고 프로그램을 작성하려고
합니다.
<!--CodeS-->
procedure TForm1.Button1Click(Sender: TObject);
begin
Crpe1.ReportName := 'C:\Report\Report5.rpt' ;
Crpe1.ParamFields[0].CurrentValue := '21' ;
Crpe1.ParamFields[1].CurrentValue := '20041101' ;
Crpe1.ParamFields[2].CurrentValue := '20050301' ;
Crpe1.Execute;
end;
<!--CodeE-->
[Error Message]
Project CR_CallParam.exe raised exception class ECrpeErrorwith message 'Error:536 Error in File C:\Report\Report5.rpt
Unable to connect:incorrect log on parameters Execute <PEStartPrintJob>'
Process stopped
Use Step or Run to continue

파라미터를 이렇게 넘기는게 맞는지도 잘모르겠습니다.
마땅히 참고할 자료가 없드라고요 그럼 고수님들의 조언 부탁드리겠습니다.
2  COMMENTS
  • Profile
    손용성 2005.04.08 20:55
    여전히 어쩌시려는 건줄 잘 모르겠지만

    좀더 자세히 답변드리자면
    procedure TCrystalReportsReviewer.FormCreate(Sender: TObject);
    var
      FileName : String;
    begin
      Application1 := CRAXDRT_TLB.TApplication.Create(self);
      FileName := ExtractFilePath(Forms.Application.ExeName);
      FileName := FileName + 'testtt.rpt';
      CrReport := Application1.OpenReport(FileName,crOpenReportByTempCopy);
      CrReport.EnableParameterPrompting := false;
      CrReport.DiscardSavedData;

      CrReport.Database.LogOnServer('crdb_odbc.dll', 데이터베이스 이름, 테이블 이름, 사용자, 비밀번호);
    //비우어는 미리보기 기능입니다만 저는 테스트로만 썼지 실제 안됩니다.
      CrystalActiveXReportViewer1.ReportSource := CrReport;
    end;


    //프로시져에 해당값을 넣으면 됩니다.
    procedure TCrystalReportsReviewer.ViewReport(Report_name: String);
    begin
      CrReport.ParameterFields.Item[1].AddCurrentValue(Report_name);
    end;


    procedure TCrystalReportsReviewer.ExportReport(Report_name: String);
    begin
    //추출하는 부분
    //저는 추출하는 부분에 PDF형식으로 했지때문에 저런 값입니다 필요하면 바꾸세요.
      CrReport.ExportOptions.DestinationType := crEDTDiskFile;
      CrReport.ExportOptions.FormatType := crEFTPortableDocFormat;

      //파일이름을 정해준다.
      CrReport.ExportOptions.ExchangeFolderPath := 'C:\temp';
      CrReport.ExportOptions.DiskFileName := Report_name + '.pdf';

      if CrReport.ExportOptions.DiskFileName <> '' then
        CrReport.Export(false);
    end;

    procedure TCrystalReportsReviewer.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      CrReport.Database.LogOffServer('crdb_odbc.dll', 데이터베이스 이름, 테이블 이름, 사용자, 비밀번호);
      CrReport := nil;
      Application1.Destroy;
    end;

    이정도면 될까요?
  • Profile
    손용성 2005.04.08 20:46
    크리스탈 리포트를 어떻게 쓰시려는 줄은 잘 모르겠으나
    델파이 6 리포트 10 기분으로

    CrReport.ParameterFields.Item[1].AddCurrentValue(Parameter_Send);

    이렇게 넘깁니다.

    신기하게도 0부터가아니고 1부터 하더군요