现在我把系统放到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的单独安装程序?我在网上找遍啦 都没看到。。。其他版本倒是一大堆。
11 个解决方案
#1
你的水晶报表是拉模式的吗?
#2
不是的 是推模式
#3
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);
试试?!
{
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);
试试?!
#4
你的错误,我怀疑是由于数据库位置的问题引起的,aliasName代表数据库位置的信息,出了点问题
#5
多谢你的解答,用啦你的代码“无法加载数据库”这个问题ok啦
不过又出现啦新的问题。。。。
我的报表中有2个数据源MainData和PageHeadData
只要是引用了MainData中field的公式字段都会报“该字段名未知”的错误
我将MainData相关字段都删除后,只在报表头放MainData和PageHeadData的field
PageHeadData可以正常显示,MainData为空;另SetDataSource时都有数据
不过又出现啦新的问题。。。。
我的报表中有2个数据源MainData和PageHeadData
只要是引用了MainData中field的公式字段都会报“该字段名未知”的错误
我将MainData相关字段都删除后,只在报表头放MainData和PageHeadData的field
PageHeadData可以正常显示,MainData为空;另SetDataSource时都有数据
#6
SetReportData(MainData, _crReportDocument);
SetReportData(PageHeadData, _crReportDocument);
这样两个数据源的都给报表赋值了
两数据源相互引用,我还没有过;为什么不放一个DaSet 呢?
一个Daset可能放多张表
SetReportData(PageHeadData, _crReportDocument);
这样两个数据源的都给报表赋值了
两数据源相互引用,我还没有过;为什么不放一个DaSet 呢?
一个Daset可能放多张表
#7
我是将2个数据源放在啦一个DataSet里面处理的
#8
现在的状况是通过遍历Report.Database.Tables分别绑定2个表,第2个绑定的表会没有数据显示。
直接通过SetDataSource(DataSet)绑定2个表,会报错“连接字符串中找不到 DSN 。。。错误的登录参数”。
我建啦个小程序把报表单独搬出来,用SetDataSource(DataSet)的方式会弹出啦数据库登录框,
推模式变成了拉模式。。。
直接通过SetDataSource(DataSet)绑定2个表,会报错“连接字符串中找不到 DSN 。。。错误的登录参数”。
我建啦个小程序把报表单独搬出来,用SetDataSource(DataSet)的方式会弹出啦数据库登录框,
推模式变成了拉模式。。。
#9
我明白了,连接字符串出问题了,你可以调试下?
一般出现这种情况可能是你原来是通过ODBC连接的,在本机上配置数据源或你连接的是ACCESS等这样的数据库,迁移到不同系统或不同电脑时,都容易出问题:
为什么不用经典的用法呢?
SqlConnection con = new Connection();//WEB下ConnectionString是在配置节点
SqlCommand....
SqlDataAdpter...
..Fill(ds)
..Con.Close()
........
这样的话,只是连接字符串没有问题,很少出麻烦
一般出现这种情况可能是你原来是通过ODBC连接的,在本机上配置数据源或你连接的是ACCESS等这样的数据库,迁移到不同系统或不同电脑时,都容易出问题:
为什么不用经典的用法呢?
SqlConnection con = new Connection();//WEB下ConnectionString是在配置节点
SqlCommand....
SqlDataAdpter...
..Fill(ds)
..Con.Close()
........
这样的话,只是连接字符串没有问题,很少出麻烦
#10
汗 我建的测试小程序就是这样写的 显示报表时变成了弹出数据库登录框。
我修改DataSourceConnections或者SetDatabaseLogon登录现在的数据库怎么都登不上去。。。
我修改DataSourceConnections或者SetDatabaseLogon登录现在的数据库怎么都登不上去。。。
#11
还是把代码替全吧,好找问题的所在
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中的表
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中的表
#1
你的水晶报表是拉模式的吗?
#2
不是的 是推模式
#3
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);
试试?!
{
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);
试试?!
#4
你的错误,我怀疑是由于数据库位置的问题引起的,aliasName代表数据库位置的信息,出了点问题
#5
多谢你的解答,用啦你的代码“无法加载数据库”这个问题ok啦
不过又出现啦新的问题。。。。
我的报表中有2个数据源MainData和PageHeadData
只要是引用了MainData中field的公式字段都会报“该字段名未知”的错误
我将MainData相关字段都删除后,只在报表头放MainData和PageHeadData的field
PageHeadData可以正常显示,MainData为空;另SetDataSource时都有数据
不过又出现啦新的问题。。。。
我的报表中有2个数据源MainData和PageHeadData
只要是引用了MainData中field的公式字段都会报“该字段名未知”的错误
我将MainData相关字段都删除后,只在报表头放MainData和PageHeadData的field
PageHeadData可以正常显示,MainData为空;另SetDataSource时都有数据
#6
SetReportData(MainData, _crReportDocument);
SetReportData(PageHeadData, _crReportDocument);
这样两个数据源的都给报表赋值了
两数据源相互引用,我还没有过;为什么不放一个DaSet 呢?
一个Daset可能放多张表
SetReportData(PageHeadData, _crReportDocument);
这样两个数据源的都给报表赋值了
两数据源相互引用,我还没有过;为什么不放一个DaSet 呢?
一个Daset可能放多张表
#7
我是将2个数据源放在啦一个DataSet里面处理的
#8
现在的状况是通过遍历Report.Database.Tables分别绑定2个表,第2个绑定的表会没有数据显示。
直接通过SetDataSource(DataSet)绑定2个表,会报错“连接字符串中找不到 DSN 。。。错误的登录参数”。
我建啦个小程序把报表单独搬出来,用SetDataSource(DataSet)的方式会弹出啦数据库登录框,
推模式变成了拉模式。。。
直接通过SetDataSource(DataSet)绑定2个表,会报错“连接字符串中找不到 DSN 。。。错误的登录参数”。
我建啦个小程序把报表单独搬出来,用SetDataSource(DataSet)的方式会弹出啦数据库登录框,
推模式变成了拉模式。。。
#9
我明白了,连接字符串出问题了,你可以调试下?
一般出现这种情况可能是你原来是通过ODBC连接的,在本机上配置数据源或你连接的是ACCESS等这样的数据库,迁移到不同系统或不同电脑时,都容易出问题:
为什么不用经典的用法呢?
SqlConnection con = new Connection();//WEB下ConnectionString是在配置节点
SqlCommand....
SqlDataAdpter...
..Fill(ds)
..Con.Close()
........
这样的话,只是连接字符串没有问题,很少出麻烦
一般出现这种情况可能是你原来是通过ODBC连接的,在本机上配置数据源或你连接的是ACCESS等这样的数据库,迁移到不同系统或不同电脑时,都容易出问题:
为什么不用经典的用法呢?
SqlConnection con = new Connection();//WEB下ConnectionString是在配置节点
SqlCommand....
SqlDataAdpter...
..Fill(ds)
..Con.Close()
........
这样的话,只是连接字符串没有问题,很少出麻烦
#10
汗 我建的测试小程序就是这样写的 显示报表时变成了弹出数据库登录框。
我修改DataSourceConnections或者SetDatabaseLogon登录现在的数据库怎么都登不上去。。。
我修改DataSourceConnections或者SetDatabaseLogon登录现在的数据库怎么都登不上去。。。
#11
还是把代码替全吧,好找问题的所在
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中的表
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中的表