我有:
德尔福2007
Crystal 11
Crystal VCL 组件的 Delphi 7 版本(我知道的最新版本,它在 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 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}
关于delphi - Delphi 2007 中的 Crystal 报表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1567022/