阿泰的软件实用主义

水晶报表/BOE

博客园 首页 新随笔 联系 订阅 管理
  208 Posts :: 9 Stories :: 3071 Comments :: 43 Trackbacks

一般使用水晶报表进行报表开发时,都要先指定数据库连接。
但是如果我们从事三层开发时,一般是不允许水晶报表直接访问数据库的,而是通过你的数据库处理层返回数据给水晶报表
其实我们可以使用水晶报表中的字段定义作为数据来源,来彻底摆脱与数据库的直接联系,
从而开发出便于发布以及摆脱数据库限制的报表系统。

当然使用该字段定义的方式进行报表的开发,比使用水晶报表直接连接数据库操作来说
增加了一些开发的过程,但是我想相对来说,还是值得的。

在第一部分中,我来讲解该类模板的制作,这部分很简单的。我实际操作并抓图示例,相信大家一看就明白。





使用字段定义功能在水晶报表中是使用一个单独的dll实现的,水晶报表默认安装时没有这个组件。
所以可能需要重新补充安装一下,进行定制安装增加该功能组件。




如果字段设置完毕,点击右上角的叉,将这个文件保存。


保存完毕后,就可以参考原来与数据库连接一样的方式来制作报表模板了


做好的报表模板如下


其实这个字段定义文件很简单,打开看看

其中的间隔是一个TAB制表位,等熟悉了以后可以自己用文本工具做这个文件就可以了。

在下一节中我用VB做一个完整的程序来给进行演示。

posted on 2005-03-11 14:41 阿泰 阅读(5730) 评论(37)  编辑 收藏 网摘 所属分类: CR我的原创

Feedback

刚接触Crystal Report,请问阿T,CR是否支持xml数据源?我查看了数据集中没有发现.
 另外在Java 环境中是否容易集成?

 谢谢!

  回复  引用    

#2楼[楼主] 2005-05-11 11:18 阿泰      
目前不支持直接读取xml文件数据
但是可以使用其他方式实现
VS6
1:使用字段定义方式(ttx)文件,将xml数据转换为Recordset数据
VS2002/2003
2:使用Ado.net方式(xsd),将xml数据转换为Dataset
水晶报表有For JBuilder的专用版本,可以轻松集成
不过可惜我对Java没有了解,也就没有实际作过。

  回复  引用  查看    

#3楼 2005-05-12 14:34 cosmoboy[未注册用户]
我查看了一些资料,感觉水晶报表对Java的支持确实不是很好.可惜用户要用(产品...),只有想办法集成了.
  谢谢 阿泰

  回复  引用    

#4楼 2005-05-23 23:16 Cryout
为什么我的crystal report中在"仅字段定义"这一步看不到"创建文件"这个按钮???????????????
  回复  引用    

#5楼[楼主] 2005-05-24 14:11 阿泰      
字段定义的报表在水晶报表默认安装时是不可用的,需要重新安装一下水晶报表,最好选完全安装,而不是默认的安装方式
  回复  引用  查看    

#6楼 2005-06-24 16:07 huadj
阿泰,我做过几次用ttx定义的,但在报表中都无法显示,是不是跟我的数据库有关(Access)?反复查过,ttx里的字段跟数据库是一一对应的,而且名称也一样。为什么会这样啊?
  回复  引用    

#7楼[楼主] 2005-06-24 16:19 阿泰      
是所有的字段不显示还是部分字段不显示?
可能原因:
传入字段值比ttx设计时的长度大
传入字段类型与ttx类型不一样,如date/datetime,这是不一样的

  回复  引用  查看    

#8楼 2005-06-24 16:37 huadj
对,是所有都不显示
  回复  引用    

#9楼 2005-06-25 17:23 huadj
阿泰,ttx要不要跟数据库相连呢?如果不是,ttx从哪里获得数据呢?
  回复  引用    

#10楼 2005-06-26 00:08 阿泰[未注册用户]
ttx本来就不需要直接与数据库相连,至于数据的获取请仔细看一下这个文章里带的代码例子,在本文的第2部分里
  回复  引用    

#11楼 2005-08-10 15:39 likai[未注册用户]
怎么不支持中文字段名,垃圾。
  回复  引用    

#12楼[楼主] 2005-08-10 17:15 阿泰      
如果你只有前面几个字的话我还可以回答你一下,
不过既然你不尊重我,我也没必要为你耗费我的时间。

  回复  引用  查看    

#13楼 2005-09-01 11:41 阿强[未注册用户]
你好!
我想用Dataset做水晶报表的数据源,以便能动态改变报表的数据,但发现无法报表并不随Dataset里的数据而更新。大致代码如下。请高人指点一下。。。谢谢!

this.crystalReportViewer1.Name = "crystalReportViewer1";


OleDbConnection nwindConn = new OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;" +
"Integrated Security=SSPI;Initial Catalog=chinaccm");

OleDbCommand selectCMD = new OleDbCommand("SELECT * FROM price where productid = 1", nwindConn);
selectCMD.CommandTimeout = 30;

OleDbDataAdapter custDA = new OleDbDataAdapter();
custDA.SelectCommand = selectCMD;

DataSet custDS = new DataSet();

custDA.Fill(custDS, "price");




ReportDocument report = new ReportDocument();
report.Load(@"E:\study\other\davidReport\Reportchinaccm.rpt");
report.SetDataSource(custDS.Tables[0] );

this.crystalReportViewer1.ReportSource = report;
crystalReportViewer1.RefreshReport();

  回复  引用    

#14楼[楼主] 2005-09-05 23:31 阿泰      
请参照这个看看
http://www.cnblogs.com/babyt/archive/2005/04/17/139152.html">http://www.cnblogs.com/babyt/archive/2005/04/17/139152.html

  回复  引用  查看    

#15楼 2005-12-13 18:43 360度[未注册用户]
为什么中文字段名会显示成乱码,真晕!

楼主你要帮帮我, 我是个初学者!

  回复  引用    

#16楼 2005-12-13 18:43 360度[未注册用户]
可以回复到我邮箱吗?
junmaster@gmail.com

  回复  引用    

请问一下你用的是水晶报表几呀?
我的怎么没有 仅字段定义这个选项呀,我的是水晶报表10

  回复  引用    

#18楼 2006-09-07 13:52 xingzi[未注册用户]
阿泰 我在 运行环境里 运行 TTX的报表就出错 会不会是版本问题呀!!
  回复  引用    

#19楼 2006-09-07 13:54 xingzi[未注册用户]
对了 我用的是JAVA哦!不过好象差不多的
  回复  引用    

#20楼 2006-09-07 14:00 xingzi[未注册用户]
对了 我的报错是连接数据源错误  看到了请帮忙快点回答 好吗/?急!!
  回复  引用    

阿泰,ttx不支持中文怎么处理呢
  回复  引用    

为什么我打开创建新连接的时候没有出现仅字段定义这一项呢?谢谢
  回复  引用    

#23楼 2006-11-22 07:54 小李[未注册用户]
ttx中的中文字段名,在rpt中显示为乱码,要如何解决呢。盼解决,谢谢,
E-mail:libo@jydrilling.com

  回复  引用    

#24楼 2006-12-12 15:24 小徐[未注册用户]
我也遇到,ttx中的中文字段名,在rpt中显示为乱码的问题,不知道该怎么解决。laoer_zj@sina.com.cn
  回复  引用    

#25楼 2007-03-19 11:17 小刘[未注册用户]
我用的时C#
在做报表时也选的是ttx文件
在本机调试通过,但是到别的机上运行时提示登入数据库
怎么回事??

  回复  引用    

楼上的是因为ttx文件路径不对
  回复  引用    

阿泰我用下面这样把所有的ttx表都加载了(表名ttx文件名),用Rs连接查询了所有表,可为什么它只能显示第一个表的数据呢? 如果不麻烦的话可不可以把答案发到我邮箱里边?
For i = 1 To Report.Database.Tables.Count
Set props = Report.Database.Tables(i).ConnectionProperties
For Each prop In props
If InStr(prop.Name, "Field Definition File") > 0 Then
Debug.Print App.Path & "\" & Report.Database.Tables(i).Name & ".ttx"
prop.Value = App.Path & "\" & Report.Database.Tables(i).Name & ".ttx"
Exit For
End If
Next
Next i

  回复  引用    

问题已经解决,还是很感谢阿泰,下面把代码也写上来,希望能帮上也出现过这个问题的朋友
''''''''''''''''''变量声明请参照阿泰的源码
''''''''''''''''''ttx文件名即表名称
'''''''''''''''''非常感谢阿泰!
For i = 1 To Report.Database.Tables.Count
Set props = Report.Database.Tables(i).ConnectionProperties
For Each prop In props
If InStr(prop.Name, "Field Definition File") > 0 Then
Debug.Print App.Path & "\" & Report.Database.Tables(i).Name & ".ttx"
prop.Value = App.Path & "\" & Report.Database.Tables(i).Name & ".ttx"
''''''''加上以下三行
If Rs.State = adStateOpen Then Rs.Close
Rs.Open "Select * From " & Report.Database.Tables(i).Name, CONN
Report.Database.Tables(i).SetDataSource Rs
''''''''''''''''''''''''''''''''''
Exit For
End If
Next
Next i

  回复  引用    

#29楼 2008-04-25 14:52 hjb8023[未注册用户]
您好,可以请教您几个问题吗,我最近在做水晶报表是VS2005+C#自带的,现在遇到几个问题:
1.水晶报表导出为Excel没有格子,全是数据,有没有办法解决呀?
2.水晶报表中每页显示20条数据,现在要求不够的用空白行填充,可是找了几天也没找到解决的办法,好着急?

以前没有用过水晶报表,刚接触希望高手帮忙指点下,谢谢...!!!!

  回复  引用    

#30楼 2008-06-20 11:55 京[未注册用户]
阿泰,我在做一个报表引擎
环境是 : .NET2005 +C#
我现在是从对方那里接受XML 然后转成dataset 我想问 .怎样把这个数据集自动给水晶报表呢

XML的格式 是已经规定好的,比如标签.我这边的水晶报表.rpt文件里应该有一个画好的格式来接受~ 那么写这个格式,用你楼上所说的这个自定义字段 应该是可以的对吗 ??
请说一下思路好吗 ? 小女子先谢谢了

着急的京

  回复  引用    

--引用--------------------------------------------------
阿泰哥: 我也遇到,ttx中的中文字段名,在rpt中显示为乱码的问题,不知道该怎么解决。阿泰兄:你可千万要帮帮我,不胜感激!!!
我的Email为lishihang@21cn.com,在线跪等。。。。。。
------------------------------------------------------

  回复  引用    

#32楼 2008-08-25 15:49 zjjhhd[未注册用户]

尊敬的阿泰师傅:请教一下,用仅字段定义文件中定义的ttx文件,在水晶报表预览中却显示为乱码,请问该如何解决?在线跪等,急盼回复为盼!大恩大德,没齿不忘!

  回复  引用    

#33楼[楼主] 2008-08-26 10:37 阿泰      
@zjjhhd

麻烦你提供相关的程序看看~

  回复  引用  查看    

#34楼 2009-02-24 14:16 VBFANS[未注册用户]
阿泰您好,首先向您表示感谢!您的这些关于CR的文章确实精彩,使我很受教益!
请教一个问题:XP下的自定义字段乱码问题如何解决?我的邮箱已留,请不吝赐教,谢谢!

  回复  引用    

#35楼 2009-06-21 17:20 DoWhile
阿泰,您好,我也遇到用尽定义字段方式创建的Rpt预览时中文显示乱码,不知道怎么解决,能不能帮我解决下,不胜感激。我的邮箱号:dianqizz@gmail.com。
  回复  引用    

#36楼[楼主] 2009-06-23 21:53 阿泰      
@DoWhile(35楼)

目前已知CR9是乱码的,CR11可以正确显示

  回复  引用  查看    

#37楼 2009-06-24 10:51 DoWhile
@阿泰
看来还是要把字段名变成英文的了,谢谢你,从您的博客我学到了很多。

  回复  引用    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 116878




相关文章:

相关链接: