【问题标题】:Crystal reports in Delphi 2007Delphi 2007 中的水晶报表
【发布时间】:2009-10-14 15:19:28
【问题描述】:

我有:

德尔福 2007

水晶 11

Delphi 7 版本的 Crystal VCL 组件(我知道的最新版本,在 D2007 中编译良好)

一个非常简单的测试Crystal报告,用Crystal 11编写,只是将表格转储到屏幕上(没有选择标准,没有公式,只有直接数据)

我试过了

创建了一个新的 VCL 表单应用程序

在表单上删除了 TCrpe 组件

将“ReportName”属性设置为我的测试报告。

我在表单上放了一个按钮,在它后面放了一行:

Crpe1.Execute

如果报告的“使用报告保存数据”选项打开,则可以正常工作。

如果我关闭该选项,那么我需要提供登录凭据。

使用这段代码(在一百万年前的 Delphi 5 中运行良好):

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  logonItem: integer;
begin
  Crpe1.LogOnServer.Clear;
  logonItem := Crpe1.LogOnServer.Add('MYSERVER.MYDOMAIN.COM');
  Crpe1.LogonServer[logonItem].UserID := 'USERNAME';
  Crpe1.LogOnServer[logonItem].Password := 'PASSWORD';
  Crpe1.LogOnServer[logonItem].DatabaseName := 'MYDATABASE';
  Crpe1.Execute;
end;

我收到此错误:

---------------------------
Project2
---------------------------
Error:536 Error in File C:\REPORT.RPT:

Unable to connect: incorrect log on parameters.

Execute <PEStartPrintJob>.
---------------------------
OK   
---------------------------

我做错了什么?如何为 Delphi 中的 Crystal VCL 组件提供登录凭据?我目前的解决方法是pretty ugly,我有很多遗留代码要转换。如果能直接使用 VCL 组件就好了。

【问题讨论】:

    标签: delphi crystal-reports delphi-2007


    【解决方案1】:

    我在 Delphi 6 中使用 VCL,效果很好。但我不使用 LogOnServer 属性,我使用 LogOnInfo。

    这适用于任何报告,以及包含子报告的报告(因为这些报告也需要提供凭据):

     With CRPE1 Do
     Begin
          With SubReports Do
          Begin
               Retrieve;
               If (Count > 0) then
               For i := 0 To (Count - 1) Do
               Begin
                    ItemIndex := i;
    
                    LogOnInfo.Retrieve;
                    For j := 0 to LogOnInfo.Count - 1 Do
                    Begin
                         LogOnInfo[j];
    
                         With LogOnInfo Do
                         Begin
                              ServerName := MyDataSource;
                              DatabaseName := DatabasePath;
                              UserID := DBUser;
                              Password := sPwd;
                         End;
                    End; {For j}
    
                    Tables.Retrieve;
               End; {For i}
    
               ItemIndex := 0;
          End; {With SubReports}
    
          SubReports[0];
     End; {With CRPE1}
    

    【讨论】:

    • 这有语法错误。我不知道怎么可能是答案!
    【解决方案2】:

    这是一些使用 VCL 组件的旧“遗留”代码:

    mCrpe.reportname:=mfilename;
    mCrpe.Connect.UserID := CustomReportCurrentUser;
    
    mCrpe.connect.ServerName:='servername';
    mCrpe.connect.DataBaseName:='databasename';
    mCrpe.connect.propagate:=True;
    mCrpe.Connect.Password := CustomReportClientPass;
    
    
    
    try
      mConnected := mCrpe.Connect.Test;
    except
      on e: eDBEngineError do begin
        showmessage(e.message);
      end;
    end;
    
    mCrpe.windowbuttonbar.refreshbtn:=true;
    mCrpe.discardsaveddata;
    mCrpe.Show;
    

    前段时间我读到 Crystal VCL 组件正在“日落”。从那以后,我迁移到了 Active X RDC 组件。不过,它需要在您的目标计算机上安装 Active X。

    【讨论】:

    • 这就是我们所做的,它仍在使用 D2007 和 Crystal 11。我们必须放弃它,RDC 进展如何?
    • 它有效.....但总的来说,它似乎是 Crystal Reports 的所有者(不确定现在是谁:Crystal Decisions --> Business Objects --> SAP....)客户端/服务器设置中几乎不支持 Crystal Reports。
    猜你喜欢
    • 2010-10-08
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多