Crystal报道了Delphi 2007

Jos*_*ons 1 delphi delphi-2007 crystal-reports

我有:

德尔福2007

水晶11

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

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

我试过了

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

删除表单上的TCrpe组件

将"ReportName"属性设置为我的测试报告.

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

Crpe1.Execute
Run Code Online (Sandbox Code Playgroud)

如果报告有"保存数据随着报告"选项打开,那么这个工作正常.

如果我把这个选项关闭,那么我就需要提供登录凭据.

使用此代码(在一百万年前的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;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

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

Unable to connect: incorrect log on parameters.

Execute <PEStartPrintJob>.
---------------------------
OK   
---------------------------
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如何在Delphi中为Crystal VCL组件提供登录凭据?我当前的解决方法非常难看,我有很多遗留代码要转换.如果我能以一种简单的方式使用VCL组件,那将是非常好的.

J__*_*J__ 5

我在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}
Run Code Online (Sandbox Code Playgroud)