您的位置:首页 > 数据库

[水晶报表]创建不受数据库限制的报表(1)

2008-03-24 00:28 309 查看
一般使用水晶报表进行报表开发时,都要先指定数据库连接。

但是如果我们从事三层开发时,一般是不允许水晶报表直接访问数据库的,而是通过你的数据库处理层返回数据给水晶报表

其实我们可以使用水晶报表中的字段定义作为数据来源,来彻底摆脱与数据库的直接联系,

从而开发出便于发布以及摆脱数据库限制的报表系统。

当然使用该字段定义的方式进行报表的开发,比使用水晶报表直接连接数据库操作来说

增加了一些开发的过程,但是我想相对来说,还是值得的。

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







使用字段定义功能在水晶报表中是使用一个单独的dll实现的,水晶报表默认安装时没有这个组件。

所以可能需要重新补充安装一下,进行定制安装增加该功能组件。






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



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



做好的报表模板如下



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



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

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


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



Feedback

#1楼 219.239.16.*

2005-05-11 10:32

cosmoboy

刚接触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楼 219.239.16.*

2005-05-12 14:34

cosmoboy

我查看了一些资料,感觉水晶报表对Java的支持确实不是很好.可惜用户要用(产品...),只有想办法集成了.

谢谢 阿泰

回复 引用 查看

#4楼 218.19.5.*

2005-05-23 23:16

Cryout

为什么我的crystal report中在"仅字段定义"这一步看不到"创建文件"这个按钮???????????????

回复 引用 查看

#5楼 [楼主]

2005-05-24 14:11

阿泰

字段定义的报表在水晶报表默认安装时是不可用的,需要重新安装一下水晶报表,最好选完全安装,而不是默认的安装方式

回复 引用 查看

#6楼 218.16.75.*

2005-06-24 16:07

huadj

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

回复 引用 查看

#7楼 [楼主]

2005-06-24 16:19

阿泰

是所有的字段不显示还是部分字段不显示?

可能原因:

传入字段值比ttx设计时的长度大

传入字段类型与ttx类型不一样,如date/datetime,这是不一样的

回复 引用 查看

#8楼 218.16.75.*

2005-06-24 16:37

huadj

对,是所有都不显示

回复 引用 查看

#9楼 219.130.43.*

2005-06-25 17:23

huadj

阿泰,ttx要不要跟数据库相连呢?如果不是,ttx从哪里获得数据呢?

回复 引用 查看

#10楼 222.67.11.*

2005-06-26 00:08

阿泰

ttx本来就不需要直接与数据库相连,至于数据的获取请仔细看一下这个文章里带的代码例子,在本文的第2部分里

回复 引用 查看

#11楼 61.49.108.*

2005-08-10 15:39

likai [未注册用户]

怎么不支持中文字段名,垃圾。

回复 引用 查看

#12楼 [楼主]

2005-08-10 17:15

阿泰

如果你只有前面几个字的话我还可以回答你一下,

不过既然你不尊重我,我也没必要为你耗费我的时间。

回复 引用 查看

#13楼 61.145.210.*

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

阿泰

请参照这个看看

/article/4662144.html

回复 引用 查看

#15楼 218.19.131.*

2005-12-13 18:43

360度 [未注册用户]

为什么中文字段名会显示成乱码,真晕!

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

回复 引用 查看

#16楼 218.19.131.*

2005-12-13 18:43

360度 [未注册用户]

可以回复到我邮箱吗?

junmaster@gmail.com

回复 引用 查看

#17楼 61.184.255.*

2006-07-31 19:07

吴争容 [未注册用户]

请问一下你用的是水晶报表几呀?

我的怎么没有 仅字段定义这个选项呀,我的是水晶报表10

回复 引用 查看

#18楼 60.12.92.*

2006-09-07 13:52

xingzi [未注册用户]

阿泰 我在 运行环境里 运行 TTX的报表就出错 会不会是版本问题呀!!

回复 引用 查看

#19楼 60.12.92.*

2006-09-07 13:54

xingzi [未注册用户]

对了 我用的是JAVA哦!不过好象差不多的

回复 引用 查看

#20楼 60.12.92.*

2006-09-07 14:00

xingzi [未注册用户]

对了 我的报错是连接数据源错误  看到了请帮忙快点回答 好吗/?急!!

回复 引用 查看

#21楼 222.82.106.*

2006-09-08 22:11

battleax [未注册用户]

阿泰,ttx不支持中文怎么处理呢

回复 引用 查看

#22楼 221.218.198.*

2006-09-19 09:17

苗苗[匿名] [未注册用户]

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

回复 引用 查看

#23楼 211.141.78.*

2006-11-22 07:54

小李 [未注册用户]

ttx中的中文字段名,在rpt中显示为乱码,要如何解决呢。盼解决,谢谢,

E-mail:libo@jydrilling.com

回复 引用 查看

#24楼 60.190.255.*

2006-12-12 15:24

小徐 [未注册用户]

我也遇到,ttx中的中文字段名,在rpt中显示为乱码的问题,不知道该怎么解决。laoer_zj@sina.com.cn

回复 引用 查看

#25楼 59.34.0.*

2007-03-19 11:17

小刘 [未注册用户]

我用的时C#

在做报表时也选的是ttx文件

在本机调试通过,但是到别的机上运行时提示登入数据库

怎么回事??

回复 引用 查看

function pageLoad()
{
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(handleInitializeRequest);
//Sys.WebForms.PageRequestManager.getInstance().add_endRequest(handleEndRequest);
}
function handleInitializeRequest(sender, args)
{
var prm = Sys.WebForms.PageRequestManager.getInstance();
var eid = args.get_postBackElement().id;
if (eid.indexOf("DeleteLink")>0)
{
args.get_postBackElement().innerHTML = "正在删除...";
}
else if (eid.indexOf("btnSubmit")>0)
{
document.getElementById("AjaxHolder_PostComment_ltSubmitMsg").innerHTML="正在提交...";
document.getElementById("AjaxHolder_PostComment_btnSubmit").disabled = true;
}
else if(eid.indexOf("refreshList")>0)
{
document.getElementById("AjaxHolder_PostComment_refreshList").innerHTML="正在刷新...";
}
}
function TempSave(ElementID)
{
try
{
CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value);
CommentsPersistDiv.save("CommentXMLStore");
}
catch(ex)
{
}
}
function Restore(ElementID)
{
CommentsPersistDiv.load("CommentXMLStore");
document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent");
}

刷新评论列表

请输入标题
请输入你的姓名
(只有博主才能看到)邮件地址无效
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: