仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 915|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网页设计Crystal Reports 和sql-server配合举行...

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:36:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
支持AIX、FreeBSD、HP-UX、Linux、MacOS、NovellNetware、OpenBSD、OS/2Wrap、Solaris、Windows等多种操作系统server|存储历程
CrystalReports和sql-server配合举行报表的开辟

1:CrystalReports功效自述
CrystalReports用于处置数据库,匡助用户剖析息争释主要信息。利用CrystalReports能够便利地创立复杂报表,同时它也供应了创立庞大或公用的报表所需的整套工具。

创立所能设想的任何报表
CrystalReports几近能够从任何数据源天生您必要的报表。内置报表专家在您天生报表和完成一样平常的报表义务过程当中,会一步一步地引导您举行操纵。报表专家经由过程公式、交织表、子报表和设置前提格局匡助体现数据的实践意义,展现大概被埋没失落的主要干系。假如笔墨和数字的确不敷充实,则用地舆舆图和图形举行抽象的信息交换。

将报表扩大到Web
CrystalReports的天真性并未停止在创立报表这一功效上?您能够用林林总总的格局公布报表,包含用Microsoft的Word和Excel公布、经由过程电子邮件乃至Web公布。初级的Web报表功效同意事情组中的其他成员在他们本人的Web扫瞄器中检察或更新共享报表。

将报表并进使用程序
经由过程将CrystalReports的报表处置功效整合到本人的数据库使用程序中,使用程序和Web开辟职员能够节俭开辟工夫并满意用户的需求。CrystalReports撑持年夜多半盛行的开辟言语,能够便利地在任何使用程序中增加报表。

不管您是IT行业的站点办理员,仍是营销推行司理,也不管您是金融业的数据库办理员仍是CEO,CrystalReports都可谓是一个功效壮大的工具,它能够匡助每个人剖析、注释主要信息。

2:CrystalReports和Sql-server分离
Crystal固然供应了壮大的报表功效,可是关于庞大的逻辑运算,倒是很难完成。可是,Crystal中能够像增加表一样增加存储历程,这就给我们的庞大运算供应了烦琐的处置办法。

3:例子
这是我们给国航公司it服务项目做的报表的sql-server存储历程部分。(接待人人配合会商)
A:每一个员工的处置妨碍完成数、总数
fgw_proc1.txt

--fgw_proc1处置妨碍完成数、总数
CREATEPROCEDURE[AHD].[fgw_proc1](@入手下手工夫datetime,@停止工夫datetime)
AS
DECLARE@beginint,@endint/*转工夫*/
execfgw_util1@入手下手工夫,@beginoutput
execfgw_util1@停止工夫,@endoutput


DECLARE@useridint,@handledfloat,@totalfloat

CREATETABLE#temp_proc1
(
useridint,
handledfloat,
totalfloat
)

DECLAREcur_ctctCURSORFORSELECTidFROMAHD.AHD.ctct--取一切的用户id
OPENcur_ctct
FETCHcur_ctctINTO@userid
WHILE@@FETCH_STATUS=0
BEGIN
--get@handlethroughexecfgw_proc2
EXECfgw_proc1_1@userid,@begin,@end,@handledoutput,@totaloutput/*call下个存储历程,失掉某个用户的办理数、打仗妨碍数*/
INSERTINTO#temp_proc1VALUES(@userid,@handled,@total)/*将用户信息拔出一时表*/
FETCHNEXTFROMcur_ctctINTO@userid/*纪录下移*/
END
CLOSEcur_ctct
DEALLOCATEcur_ctct
SELECT*FROM#temp_proc1/*天生停止集*/
DROPTABLE#temp_proc1/*开释*/
GO

fgw_proc1_1.txt

--fgw_proc1_1
CREATEPROCEDURE[AHD].[fgw_proc1_1](@useridint,@beginint,@endint,@handledfloatOUTPUT,@totalfloatOUTPUT)
AS

SET@handled=0
SET@total=0
DECLARE@cr_idint,@zh_idint,@statuschar(12),@to_statuschar(12),@cntint,@open_dateint
--handled/*盘算这人的处置完成妨碍数*/
DECLAREcur11_1CURSORFORSELECTAHD.call_req.idAScr_id,AHD.ztr_his.idASzh_id,AHD.call_req.status,AHD.ztr_his.to_status,AHD.ztr_his.to_cntAScnt,AHD.call_req.open_dateFROMAHD.call_reqLEFTOUTERJOINAHD.ztr_hisONAHD.call_req.persid=AHD.ztr_his.call_req_idWHEREAHD.call_req.type=IAND(AHD.call_req.statusIN(CL,TTPC))AND(AHD.ztr_his.to_statusIN(L1WIP,L2WIP,ICP,SRBYL1,SRBYL2,NCCBYL1,NCCBYL2,CRBYL1,CRBYL2))ANDAHD.call_req.open_date>@beginANDAHD.call_req.open_date<@endANDAHD.ztr_his.to_cnt=@userid
OPENcur11_1
FETCHcur11_1INTO@cr_id,@zh_id,@status,@to_status,@cnt,@open_date/*事务id,汗青id,形态,处置人,翻开工夫取所必要的值*/
WHILE@@FETCH_STATUS=0/*轮回每个纪录*/
BEGIN
DECLARE@count2int/*每一个事务单在汗青纪录中有几条*/
DECLAREcur11_2CURSORFORSELECTcount(*)FROMAHD.call_reqLEFTOUTERJOINAHD.ztr_hisONAHD.call_req.persid=AHD.ztr_his.call_req_idWHEREAHD.call_req.type=IAND(AHD.call_req.statusIN(CL,TTPC))AND(AHD.ztr_his.to_statusIN(L1WIP,L2WIP,ICP,SRBYL1,SRBYL2,NCCBYL1,NCCBYL2,CRBYL1,CRBYL2))AND(AHD.call_req.open_date>@begin)AND(AHD.call_req.open_date<@end)AND(AHD.call_req.id=@cr_id)
OPENcur11_2
FETCHcur11_2INTO@count2
CLOSEcur11_2
DEALLOCATEcur11_2
IF@count20
SET@handled=@handled+1.0/@count2/*这人的处置完成数*/
FETCHNEXTFROMcur11_1INTO@cr_id,@zh_id,@status,@to_status,@cnt,@open_date/*轮回纪录*/
END
CLOSEcur11_1
DEALLOCATEcur11_1

--total/*盘算这人的处置妨碍数*/
DECLAREcur11_3CURSORFORSELECTcount(distinct(AHD.call_req.id))FROMAHD.call_reqLEFTOUTERJOINAHD.ztr_hisONAHD.call_req.persid=AHD.ztr_his.call_req_idWHEREAHD.call_req.type=IAND(AHD.call_req.open_date>@beginANDAHD.call_req.open_date<@end)AND(AHD.ztr_his.to_cnt=@userid)/*取这人一切单*/

OPENcur11_3
FETCHcur11_3INTO@total/*总妨碍数*/
CLOSEcur11_3
DEALLOCATEcur11_3

--SELECT@handled
--declare@handledfloat,@totalfloat
--execfgw_proc1_1400115,1,1111111111,@handledoutput,@totaloutput
--print@handled
--print@total
GO

B:每一个员工的呼应达标数、呼应总数
fgw_proc2.txt
--fgw_proc2呼应达标数、呼应总数
CREATEPROCEDURE[AHD].[fgw_proc2](@入手下手工夫datetime,@停止工夫datetime)
AS
DECLARE@beginint,@endint
execfgw_util1@入手下手工夫,@beginoutput
execfgw_util1@停止工夫,@endoutput

DECLARE@cr_idint,@zh_idint,@cntint,@symchar(30),@time_stampint,@isOKint,@useridint,@handledint,@totalint
DECLARE@call_req_idchar(30)

CREATETABLE#temp_proc2/*呼应达标数、呼应总数*/
(
useridint,
handled2int,
total2int
)

CREATETABLE#temp_proc2_1/*事务单为op的纪录*/
(
cr_idint,
zh_idint,
cntint,
isOKint
)

--initialize#temp_proc2_1/*已op的单,是不是呼应达标,前往处置人*/
DECLAREcur2_1CURSORFORSELECTzh.call_req_id,zh.id,zh.to_cnt,sd.sym,zh.time_stampFROMAHD.AHD.call_reqascrLEFTOUTERJOINAHD.AHD.ztr_hisaszhONcr.persid=zh.call_req_idLEFTOUTERJOINAHD.AHD.srv_descassdONcr.support_lev=sd.codeWHEREcr.type=Iandcr.open_date>@beginandcr.open_date<@endand(zh.to_status=ASTOL1ORzh.to_status=ASTOL2)
OPENcur2_1
FETCHcur2_1INTO@call_req_id,@zh_id,@cnt,@sym,@time_stamp/*事务单id,汗青单id,职员,服务级别,op形态的工夫*/
WHILE@@FETCH_STATUS=0
BEGIN
EXECfgw_proc2_1@call_req_id,@sym,@time_stamp,@isOKoutput
INSERTINTO#temp_proc2_1VALUES(@cr_id,@zh_id,@cnt,@isOK)
FETCHNEXTFROMcur2_1INTO@call_req_id,@zh_id,@cnt,@sym,@time_stamp
END
CLOSEcur2_1
DEALLOCATEcur2_1

--initialize#temp_proc2
DECLAREcur2_2CURSORFORSELECTidFROMAHD.AHD.ctct
OPENcur2_2
FETCHcur2_2INTO@userid
WHILE@@FETCH_STATUS=0
BEGIN
--get@total/*一切的已呼应的单*/
DECLAREcur2_3CURSORFORSELECTcount(*)FROM#temp_proc2_1WHEREcnt=@userid
OPENcur2_3
FETCHcur2_3INTO@total
CLOSEcur2_3
DEALLOCATEcur2_3

--get@handled/*一切的已呼应的单,并达标的单*/
DECLAREcur2_4CURSORFORSELECTcount(*)FROM#temp_proc2_1WHEREcnt=@useridANDisOK=1
OPENcur2_4
FETCHcur2_4INTO@handled
CLOSEcur2_4
DEALLOCATEcur2_4

INSERTINTO#temp_proc2VALUES(@userid,@handled,@total)
FETCHNEXTFROMcur2_2INTO@userid
END
CLOSEcur2_2
DEALLOCATEcur2_2
DROPTABLE#temp_proc2_1
SELECT*FROM#temp_proc2
DROPTABLE#temp_proc2
GO

fgw_proc2_1.txt
--fgw_proc2_1
CREATEPROCEDURE[AHD].[fgw_proc2_1](@call_req_idchar(30),@levelchar(30),@time_stampint,@isOKintOUTPUT)
AS
SETNOCOUNTON
SET@isOK=0

DECLAREcur_zhCURSORFORSELECTtime_stampFROMAHD.AHD.ztr_hisWHEREcall_req_id=@call_req_idandto_statusin(L1WIP,L2WIP)andtime_stamp>@time_stamp
OPENcur_zh
DECLARE@time_stamp1int
SET@time_stamp1=0

FETCHcur_zhINTO@time_stamp1
IF(@time_stamp1isnotnull)and(@time_stamp10)
BEGIN
IFCHARINDEX(一级,@level)ISNOTNULLANDCHARINDEX(一级,@level)0
BEGIN
if@time_stamp1-@time_stamp<600
SET@isOK=1
END
ELSEIFCHARINDEX(二级,@level)ISNOTNULLANDCHARINDEX(二级,@level)0
BEGIN
if@time_stamp1-@time_stamp<1800
SET@isOK=1
END
ELSEIFCHARINDEX(三级,@level)ISNOTNULLANDCHARINDEX(三级,@level)0
BEGIN
if@time_stamp1-@time_stamp<1800
SET@isOK=1
END
ELSEIFCHARINDEX(四级,@level)ISNOTNULLANDCHARINDEX(四级,@level)0
BEGIN
if@time_stamp1-@time_stamp<1800
SET@isOK=1
END
END

CLOSEcur_zh
DEALLOCATEcur_zh
--SELECT@isOK,@time_stamp1
GO

C:每一个员工的处置时限达标数,总数
fgw_proc3.txt
--fgw_proc3
CREATEPROCEDUREfgw_proc3(@入手下手工夫datetime,@停止工夫datetime)
AS
/*工夫转换*/
DECLARE@beginint,@endint
execfgw_util1@入手下手工夫,@beginoutput
execfgw_util1@停止工夫,@endoutput

DECLARE@cr_idint,@zh_idint,@cntint,@symchar(30),@time_stampint,@isOKint,@useridint,@handledint,@totalint

CREATETABLE#temp_proc3
(
useridint,
handled2int,
total2int
)

DECLAREcur3_2CURSORFORSELECTidFROMAHD.AHD.ctct
OPENcur3_2
FETCHcur3_2INTO@userid
WHILE@@FETCH_STATUS=0
BEGIN
--get@handled
DECLAREcur3_4CURSORFORSELECTdistinct(cr.id)FROMAHD.AHD.call_reqascrLEFTOUTERJOINAHD.AHD.ztr_hisaszhONcr.persid=zh.call_req_idWHEREcr.type=Iandcr.open_date>@beginandcr.open_date<@endandzh.to_cnt=@useridandcr.sla_violation=0
OPENcur3_4
SET@handled=@@CURSOR_ROWS
CLOSEcur3_4
DEALLOCATEcur3_4

--get@total
DECLAREcur3_5CURSORFORSELECTdistinct(cr.id)FROMAHD.AHD.call_reqascrLEFTOUTERJOINAHD.AHD.ztr_hisaszhONcr.persid=zh.call_req_idWHEREcr.type=Iandcr.open_date>@beginandcr.open_date<@endandzh.to_cnt=@userid
OPENcur3_5
SET@total=@@CURSOR_ROWS
CLOSEcur3_5
DEALLOCATEcur3_5

INSERTINTO#temp_proc3VALUES(@userid,@handled,@total)
FETCHNEXTFROMcur3_2INTO@userid
END
CLOSEcur3_2
DEALLOCATEcur3_2
SELECT*FROM#temp_proc3
DROPTABLE#temp_proc3

D:将日期格局转换成整型
fgw_util1.txt

--fgw_util1
CREATEPROCEDURE[AHD].[fgw_util1](@timedatetime,@secondsintoutput)
AS
set@seconds=datediff(ss,1970-01-0100:00:00,@time)
GO

例子只是整盘拷贝了代码,接待人人配合会商
Federated将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用
再见西城 该用户已被删除
沙发
发表于 2015-1-19 18:26:41 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
若相依 该用户已被删除
板凳
发表于 2015-1-27 07:31:19 | 只看该作者
大家注意一点。如下面的例子:
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-5 04:09:59 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
小女巫 该用户已被删除
5#
发表于 2015-2-11 04:10:16 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
因胸联盟 该用户已被删除
6#
发表于 2015-3-1 21:22:58 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
简单生活 该用户已被删除
7#
发表于 2015-3-10 23:53:19 | 只看该作者
我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
8#
发表于 2015-3-17 16:11:56 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
小魔女 该用户已被删除
9#
发表于 2015-3-24 12:10:27 | 只看该作者
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 00:20

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表