首页 > 解决方案 > 如何从 CrystalDecisions.CrystalReports.Engine.dll 访问 DataSourceConnections 中的项目?

问题描述

我正在尝试使用 Python 创建一个脚本来运行一些 Crystal 报表,但我有点卡住了。我正在使用 pythonnet 库并加载了报告,所以我自然需要设置登录凭据/数据库信息,然后刷新报告。SetDatabaseLogon() 不起作用,最终我发现在 [docs][1] 中,我的 ReportDocument 对象上有一个 DataSourceConnections 属性。文档中有一个教程说我应该为这个属性创建一个变量,然后访问一个存储在索引 0 的对象,然后使用一个 SetConnection() 方法来建立数据库连接。尽管没有像文档所说的那样索引的属性,但我收到一个错误。我查看了 DataSourceConnections 并看到有一个属性 Item,但有一个注释 Item 没有 t 在 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)

标签: pythonc#crystal-reports-xipython-3.9python.net

解决方案


推荐阅读