Crystal Reports 版本迁移问题

kencentre 2010-06-10 09:46:33
公司一个项目最初是用VS2003+CR10.0.33开发的,后升级到vs2005,Crystal Reports还是10.0.33版本在XP下运行正常。
现在我把系统放到windows7下运行调试,系统会直接退出DEBUG模式,在SAP一查才发现10.0.33不支持framework2.0
(我非常纳闷在xp下项目怎么跑的很好呢)。
于是我把项目中对于Crystal Reports的引用全部改成vs2005自带的10.2.36,这下项目可以对报表进行调试啦。
但是在修改报表数据源名称时报错

for(int i =0;i<_crReportDocument.Database.Tables.Count;i++){
_crReportDocument.Database.Tables[i].Location = aliasName;
}
_crReportDocument.SetDataSource(DataSet);


报错信息为:加载数据库信息失败。详细资料: 无法加载数据库 DLL'crdb_query.dll' 。
想问下各位大大,这是不是因为没有安装完全版的水晶报表导致的?哪有水晶报表10.2的单独安装程序?我在网上找遍啦 都没看到。。。其他版本倒是一大堆。
...全文
186 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
东莞寻香苑 2010-06-10
  • 打赏
  • 举报
回复
你的错误,我怀疑是由于数据库位置的问题引起的,aliasName代表数据库位置的信息,出了点问题
东莞寻香苑 2010-06-10
  • 打赏
  • 举报
回复
private void SetData(DataSet DsReportData, ReportDocument oReport)
{
foreach (Table oTable in oReport.Database.Tables)
oTable.SetDataSource( DsReportData.Tables[ oTable.Name.ToString() ]);
}

private ReportDocument SetReportData(DataSet DsReportData, ReportDocument oReport)
{
this.SetData(DsReportData,oReport);
foreach(ReportDocument oSubReport in oReport.Subreports)
this.SetData(DsReportData,oSubReport);
return oReport;
}

把上面的两个方法添上后,直接把:
for(int i =0;i<_crReportDocument.Database.Tables.Count;i++){
_crReportDocument.Database.Tables[i].Location = aliasName;
}
_crReportDocument.SetDataSource(DataSet);

换成:
SetReportData(DataSet, _crReportDocument);

试试?!

kencentre 2010-06-10
  • 打赏
  • 举报
回复
不是的 是推模式
东莞寻香苑 2010-06-10
  • 打赏
  • 举报
回复
你的水晶报表是拉模式的吗?
东莞寻香苑 2010-06-10
  • 打赏
  • 举报
回复
还是把代码替全吧,好找问题的所在


SqlConnection con = new Connection();//WEB下ConnectionString是在配置节点
SqlCommand....

SqlDataAdpter...

..Fill(ds)

..Con.Close()


report.SetDataSource(ds.Tables[0]);//直接给表

.............

crystalView1.ReportDocument= report;

........................

这种模式的,我还没有见出现"显示报表时变成了弹出数据库登录框。"

除非:
(1)report.SetDataSource(ds);//直接给ds
(2)加了crystalReportView控件后,还要添加一个CrystalReportSource(多此一举)
(3)设计时用DataSet1,report.SetDataSource时,根本不用DataSet1中的表






kencentre 2010-06-10
  • 打赏
  • 举报
回复
汗 我建的测试小程序就是这样写的 显示报表时变成了弹出数据库登录框。
我修改DataSourceConnections或者SetDatabaseLogon登录现在的数据库怎么都登不上去。。。
东莞寻香苑 2010-06-10
  • 打赏
  • 举报
回复
我明白了,连接字符串出问题了,你可以调试下?
一般出现这种情况可能是你原来是通过ODBC连接的,在本机上配置数据源或你连接的是ACCESS等这样的数据库,迁移到不同系统或不同电脑时,都容易出问题:
为什么不用经典的用法呢?

SqlConnection con = new Connection();//WEB下ConnectionString是在配置节点
SqlCommand....

SqlDataAdpter...

..Fill(ds)

..Con.Close()

........

这样的话,只是连接字符串没有问题,很少出麻烦
kencentre 2010-06-10
  • 打赏
  • 举报
回复
现在的状况是通过遍历Report.Database.Tables分别绑定2个表,第2个绑定的表会没有数据显示。
直接通过SetDataSource(DataSet)绑定2个表,会报错“连接字符串中找不到 DSN 。。。错误的登录参数”。
我建啦个小程序把报表单独搬出来,用SetDataSource(DataSet)的方式会弹出啦数据库登录框,
推模式变成了拉模式。。。
kencentre 2010-06-10
  • 打赏
  • 举报
回复
我是将2个数据源放在啦一个DataSet里面处理的
东莞寻香苑 2010-06-10
  • 打赏
  • 举报
回复
SetReportData(MainData, _crReportDocument);
SetReportData(PageHeadData, _crReportDocument);
这样两个数据源的都给报表赋值了


两数据源相互引用,我还没有过;为什么不放一个DaSet 呢?

一个Daset可能放多张表





kencentre 2010-06-10
  • 打赏
  • 举报
回复
多谢你的解答,用啦你的代码“无法加载数据库”这个问题ok啦
不过又出现啦新的问题。。。。
我的报表中有2个数据源MainData和PageHeadData
只要是引用了MainData中field的公式字段都会报“该字段名未知”的错误
我将MainData相关字段都删除后,只在报表头放MainData和PageHeadData的field
PageHeadData可以正常显示,MainData为空;另SetDataSource时都有数据

4,818

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧