通过Cystal报表SDK C#应用表联接

2020-08-16 23:58发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在使用C#将Crystal Report 8.5迁移到Crystal report16。

到目前为止,我正在使用以下代码执行查询:

CrystalDecisions.Shared.ConnectionInfo ConnInf;
ConnInf = reportDocObject.Database.Tables [0] .LogOnInfo.ConnectionInfo;

字符串strTableName = reportDocObject.Database.Tables [0] .Name;

reportDocObject.SetSQLCommandTable(ConnInf,strTableName,CombinedQuery);//crptModel.strSQLClause);
reportDocObject.VerifyDatabase();

crystalReportViewerBrz.ReportSource = reportDocObject;

如果我在" From"子句中的表上设置了查询,则上述代码可以正常工作,但是如果查询具有join语句并从两个表中获取记录,则以上代码将无法正常工作。

我在Visual Studio2019中使用SDK2017和Crystal Report 2016。

请建议是否可以使用SQL语句中的join执行上述方式的查询。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在使用C#将Crystal Report 8.5迁移到Crystal report16。

到目前为止,我正在使用以下代码执行查询:

CrystalDecisions.Shared.ConnectionInfo ConnInf;
ConnInf = reportDocObject.Database.Tables [0] .LogOnInfo.ConnectionInfo;

字符串strTableName = reportDocObject.Database.Tables [0] .Name;

reportDocObject.SetSQLCommandTable(ConnInf,strTableName,CombinedQuery);//crptModel.strSQLClause);
reportDocObject.VerifyDatabase();

crystalReportViewerBrz.ReportSource = reportDocObject;

如果我在" From"子句中的表上设置了查询,则上述代码可以正常工作,但是如果查询具有join语句并从两个表中获取记录,则以上代码将无法正常工作。

我在Visual Studio2019中使用SDK2017和Crystal Report 2016。

请建议是否可以使用SQL语句中的join执行上述方式的查询。

付费偷看设置
发送
3条回答
haha101010
1楼 · 2020-08-17 00:44.采纳回答

在Crystal 8.5或更早版本和Crystal 9或更高版本之间,.rpt文件的内部结构之间存在很大差异。 最大的缺点是,在Crystal 8.5及更早版本中,您可以手动修改Crystal生成的SQL以根据需要进行调整。 从Crystal 9开始,您将无法操作Crystal生成的SQL,而不得不在报表中使用Command而不是表格。

大约15年前,我不得不将数百个Crystal 8.5报表转换为 水晶十一。 我们发现,对于只有一个表的报表,我们可以在新版本的Crystal中打开它们,并保存它们以进行转换。 对于具有多个表的报表,我们必须在新版本中手动重新创建它们。 将表添加到新版本中并加入数据库专家后,将行将每个对象从旧报表复制到新报表中是很容易的任务,除了必须重新绘制的行。 我的猜测是您正在尝试避免手动进行操作。 除非您有成千上万的Crystal报表要转换,否则使用一些初级资源来完成大多数初始转换,并由更熟悉报表的人来检查它们而不是尝试这样做,这样做将更具成本效益,并且更容易手动完成此操作。

-Dell

hongfeng1314
2楼-- · 2020-08-17 00:27

嗨,

感谢Dell Stinnett-Christy的回复,

您是对的,我们希望避免手动重新创建Crystal报表,因为这些报表大约有800个正在使用内部联接。 SetSQLComandTable可以很好地处理单个表数据,但是我想基本上它的用法是设置表名。

我们想知道像单表植入这样的解决方案。

"将表添加到新版本中并加入数据库专家后,将行复制到旧对象中的每个对象(旧行除外)复制到新报表是一项相当简单的任务...。

在这一点上有些困惑。 您是否要说,如果我们通过数据库专家应用联接,那么可以像通过编程的单表查询一样使用它? 请建议

第二个查询:我们没有任何方法可以通过忽略rpt文件中的查询来通过程序执行这些类型的查询(带有join)?
谢谢

粗暴的香蕉
3楼-- · 2020-08-17 00:33
< p>您可以尝试使用ReplaceConnection()更新报告数据源,但是由于Dell指出数据库dll发生了更改,因此手动执行此操作可能更容易。

请勿将CR for VS安装到装有CR 8.5的PC上,它将无法工作,8.5不支持并行安装。

问题是VS的CR将自动映射字段,如果找不到匹配项,它将删除表和字段。

请参阅下载的WIKI,我有一个示例参数测试应用程序,可用于入门。

https: //wiki.scn.sap.com/wiki/display/BOBJ/Crystal+Reports%2C+Developer+for+Visual+Studio+Downloads

https://blogs.sap.com/2016/02/17/how-to-parameters-in-crystal-reports-for-visual-studio-net /

一周热门 更多>