1

我有:

德尔福 2007

水晶 11

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

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

我试过了

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

将 TCrpe 组件拖放到表单上

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

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

Crpe1.Execute

如果报告打开了“使用报告保存数据”选项那么这可以正常工作。

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

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

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 组件提供登录凭据?我目前的解决方法很丑陋,而且我有很多遗留代码要转换。如果我能以一种直接的方式使用 VCL 组件,那就太好了。

4

2 回答 2

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}
于 2009-10-14T15:57:02.240 回答
3

这是一些使用 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。

于 2009-10-15T14:07:37.097 回答