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组件,那将是非常好的.
我在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)