python - 如何从 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)
解决方案
推荐阅读
- ios - UICollectionView 不定式滚动
- python - 有效获取 3D 阵列中堆叠图像的图像边界
- excel - 如何在excel单元格的最后一个字母前添加正斜杠
- java - 如何检查一个子节点在图中是否有多个父节点?打印父母和那个孩子
- wpf - WPF TextBox DataContext 不起作用
- react-spring - React Spring中的高度动画不起作用
- python - 获取return语句的行号
- java - 集群生产服务器中的性能问题
- angular - 等待来自服务器的数据,然后以角度执行函数、异步和同步代码
- wordpress - 在 Wordpress 中为所有新用户设置默认密码