德尔福5& Crystal XI Rel。 2(RDC)怎么样?

时间:2009-06-26 10:11:33

标签: delphi crystal-reports

我正在尝试使用class from JosephStyons,但我确实在“用户ID”设置的行上出现“无效索引”错误。

FRpt.Database.Tables[i].ConnectionProperties.Item['User ID'] := edUserName.Text;

这是我的环境:

WinXP Sp3,Crystal Reports Developer XI Rel.2 SP4,Delphi 5 Update Pack 1

非常感谢任何帮助或想法!

THX, 莱因哈德

3 个答案:

答案 0 :(得分:0)

你[i]的价值可能是罪魁祸首...我不记得肯定但是我相信第一张表将是Table [1]而不是Table [0]。我改变了我的循环使用:

CrTables:= CrDatabase.Tables;

对于crTables中的crTableObj

您可以尝试使用如上所示的for循环或以1而不是0开始逐步遍历表。

我希望这会有所帮助。

答案 1 :(得分:0)

在该行上设置一个断点并使用评估/修改 如果您尝试无效的操作,它将返回错误。

  1. 检查FRpt.Database.Tables[i]并查看它是否对您认为i的最小值和最大值有效。
    如果Tables是一个数组,那么避免这种情况的一种方法是使用...Low(Tables) to High(Tables)

  2. 如果你的表格好了,检查FRpt.Database.Tables[i].ConnectionProperties.Item['User ID']并查看它是否有效 可能是Item getter不喜欢“User ID”中嵌入的空格。某些产品需要使用“[User ID]”等特殊字符进行环绕,其他产品需要替换为“User_ID”这样的下划线

答案 2 :(得分:0)

您是否也设置了密码,服务器名称和数据库名称?

procedure TReports.LogonToDBTables(cReport:
  CrystalDecisions.CrystalReports.Engine.ReportDocument;
  ConnInfo: ConnectionInfo);
var
  CrDataBase: Database;
  CrTables: Tables;
  CrTableObj: TObject;
  CrTable: Table;
  CrTableLogonInfo: TableLogonInfo;
  iSubReportIndex: smallint;
begin
  CrDataBase := CReport.Database;
  CrTables := CrDatabase.Tables;
  cReport.DataSourceConnections[0].IntegratedSecurity := False;

  for crTableObj in crTables do
    begin
      crTable := CrystalDecisions.CrystalReports.Engine.Table(crTableObj);
      crTableLogonInfo := crTable.LogOnInfo;
      crTableLogonInfo.ConnectionInfo := ConnInfo;
      crTable.ApplyLogOnInfo(crTableLogonInfo);
    end;
end;

function TReports.GetConnectionInfo(): ConnectionInfo;
var
  cTemp: ConnectionInfo;
begin
  cTemp := ConnectionInfo.Create();
  cTemp.AllowCustomConnection := True;
  cTemp.ServerName := GetServerName();
  cTemp.DatabaseName := GetDBName();
  cTemp.UserID := GetDBUserID();
  cTemp.Password := GetDBPassword();
  Result := cTemp;
end;