如何从 CrystalDecisions.CrystalReports.Engine.dll 访问 DataSourceConnections 中的项目?

问题描述

我正在尝试使用 Python 创建一个脚本来运行一些 Crystal 报表,但我有点卡住了。我正在使用 pythonnet 库并且我已经加载了报告,所以自然我需要设置登录凭据/数据库信息然后刷新报告。 SetDatabaselogon() 不起作用,最终我发现在 [docs][1] 中,在我的 ReportDocument 对象上有一个 DataSourceConnections 属性。文档中有一个教程说我应该为此属性创建一个变量,然后访问存储在索引 0 处的对象,然后使用 SetConnection() 方法来建立数据库连接。我收到一个错误,虽然没有像文档所说的 Index 属性。我查找了 DataSourceConnections 并看到有一个属性 Item,但有一条说明 Item 在 C# 中不起作用,而是“使用语法:collection[0]”。有谁知道这是什么意思?我不太了解 C#,但我相信 pythonnet 正在使用 C# 访问 CLR。​​

从文档中可以看出代码中的过程应该是这样的:
- 声明ReportDocument的实例
- 将 ReportDocument.DataSourceConnections 存储在变量中
- 访问前一个变量的第一个索引,它应该是一个对象(IConnectionInfo)
- 然后在之前的变量上调用 SetConnection() 方法,例如 myConnectInfo.SetConnection('server','db','user','pw')
- 如果连接正常则刷新报告 ReportDocument.Refresh()

这是使用来自 Crystal Reports SDK 的 Crystal Reports for Visual Studio。要重现该问题,您需要 SDK 和 Pythonnet。代码如下:

import clr
clr.AddReference("CrystalDecisions.CrystalReports.Engine")
from CrystalDecisions.CrystalReports.Engine import *
clr.AddReference("CrystalDecisions.Shared")
from CrystalDecisions.Shared import *

#create report instance and load report
report = ReportDocument()
report.Load('myrpt.rpt')

#Get connection information
data_source_connection = report.DataSourceConnections
my_connect = data_source_connection[0]

#just to see if anything is there
print(my_connect)

这里的错误是它不可索引。如果我尝试访问它不存在的 Item 属性
[1]:https://docs.microsoft.com/en-us/previous-versions/ms226072(v=vs.90)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)