如何从CrystalDecisions.CrystalReports.Engine.dll访问数据源连接中的项?

2024-04-27 03:44:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用Python创建一个脚本来运行一些Crystal报表,但我有点卡住了。我正在使用pythonnet库,并且已经加载了报告,因此自然需要设置登录凭据/DB信息,然后刷新报告。SetDatabaseLogon()不起作用,最终我在[docs][1]中发现,在我的ReportDocument对象上有一个DataSourceConnections属性。文档中有一个教程说,我应该为此属性创建一个变量,然后访问存储在索引0中的对象,然后使用SetConnection()方法来建立DB连接。我得到一个错误,虽然没有像文档所说的索引属性。我查找了DataSourceConnections,发现其中有一个属性项,但需要注意的是,该属性项在C#中不起作用,而是“使用语法:集合[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)