0

我有 2 个应用程序:

    1. 为报告准备数据的应用程序 - C# (.Net 1.1)
    2.显示报告的应用程序 - C++(也许)

第一个应用程序通过命令行向第二个应用程序发送参数,例如报告文件名,报告参数。然后第二个应用程序显示准备好的报告。

现在我想更改一些报告字段。我在第一个应用程序中的代码:

ReportDocument rDoc = new ReportDocument();
rDoc.Load(@"D:\reports\report_1.rpt");
rDoc.Database.Tables[0].Location = "newDBName.schema.oldTableName";
rDoc.SaveAs(@"D:\reports\report_1_modif.rpt",ReportFileFormat.VSNetFileFormat);

我想修改 rpt 文件,因为我想从存档数据库中获取数据。“CrystalDecisions.CrystalReports.Engine”参考版本为9.1.5000.0。因此,由于版本不兼容,第二个应用程序无法使用修改后的 rpt 文件。第二个应用程序只能使用 8.5 文件格式。

当我在 CR Developer 中打开 rpt 文件时,我可以手动更改位置并以 8.5 文件格式保存。在这种情况下,第二个程序通常适用于修改后的文件。

所以我的问题是:“如何在 .Net C# 中打开 rpt 文件 8.5,用另一个名称修改并保存为 8.5 格式?”。也许我应该使用一些非托管代码?

Crystal Reports 8.5 于 2001 年发布。.Net 于 2002 年发布。

4

1 回答 1

0

我解决了问题。我的做法:

  1. 在 C# 代码中,我们在每个用户单击“显示报告”后更新 DB 中的同义词集。更新后,每个同义词仍然具有相同的名称,但遵循不同数据库中的另一个表。
  2. 我们手动修改了 CR 8.5 文件:a) 将连接类型更改为 OLE DB(本机 SQL 客户端),因为 ODBC 层不支持同义词 b) 将同义词设置为表位置而不是完整表名。
  3. 任务解决!

UPD。我们需要 p2soledb.dll 来使用 OLE DB。

于 2012-10-10T04:32:55.790 回答