求不能将存储过程做数据源的解决方法!

winstar66 2004-10-23 08:36:19
求解决方法:后台已可以用存储过程解决,但直接用该存储过程做数据源,创建数据窗口失败!
请教有没有解决方案,(注:下面的例子数据比较简单,用交叉表也能生成最后的报表,
实际数据比例子数据复杂,不能用交叉表生成结果,因而需要先在sql后台处理)

表结构如下:
销售表
销售日期 柜台号 金额
2004-10-10 aaa 20000
2004-10-10 bbb 35000
2004-10-10 ccc 40000
2004-10-11 aaa 38000
2004-10-11 bbb 46000
2004-10-11 ccc 50000
柜台表
编号 名称
aaa 食品柜
bbb 服装柜
ccc 家电柜
ddd 文化柜
... ......
用户输入柜台编号及销售起止日期构建成下面的表
如上输入柜台编号为aaa,bbb,ccc销售日期起止日期2004-10-10,2004-10-11
结果表如下:
销售日期 食品柜 服装柜 家电柜 合计金额
2004-10-10 20000 35000 40000 95000
2004-10-11 38000 46000 50000 134000

后台解决方法:
--用存储过程

--示例

--示例数据
create table 销售表(销售日期 datetime,柜台号 varchar(10),金额 int)
insert 销售表 select '2004-10-10','aaa',20000
union all select '2004-10-10','bbb',35000
union all select '2004-10-10','ccc',40000
union all select '2004-10-11','aaa',38000
union all select '2004-10-11','bbb',46000
union all select '2004-10-11','ccc',50000

create table 柜台表(编号 varchar(10),名称 varchar(10))
insert 柜台表 select 'aaa','食品柜'
union all select 'bbb','服装柜'
union all select 'ccc','家电柜'
union all select 'ddd','文化柜'
go

--查询的存储过程
create proc p_qry
@编号 varchar(8000),
@开始日期 datetime,
@结束日期 datetime
as
declare @s varchar(8000),@tj varchar(100)
select @s=''
,@tj=' where 销售日期 between '''
+convert(char(10),@开始日期,120)
+''' and '''
+convert(char(10),@结束日期,120)
+''''
select @s=@s+',['+名称+']=sum(case 柜台号 when '''+编号+''' then 金额 else 0 end)'
from 柜台表 where charindex(','+编号+',',','+@编号+',')>0
exec('
select 销售日期=convert(char(10),销售日期,120)'+@s+'
from 销售表 '+@tj+'
group by convert(char(10),销售日期,120)')
go

--调用
exec p_qry 'aaa,bbb,ccc','2004-10-10','2004-10-11'
go

--删除测试
drop table 销售表,柜台表
drop proc p_qry

/*--测试结果

销售日期 食品柜 服装柜 家电柜
---------- ----------- ----------- -----------
2004-10-10 20000 35000 40000
2004-10-11 38000 46000 50000

(所影响的行数为 2 行)
--*/
...全文
197 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
handycyw 2004-10-25
  • 打赏
  • 举报
回复
创建好datawindow,甚至可以先构建sql(select)语句,用syntaxfromsql()取得dw语法,再creat():(dw.creat(sqlca,ls_sql,style(type=grid),ls_err)),声明datastore lds_1,lds_1.create(ls_sql);或者lds_1.dataobject='';lds_1.settransobject(sqlca),lds_1.retrieve();
其它的操作与datawindow类似
winstar66 2004-10-24
  • 打赏
  • 举报
回复
可能是因为字段不固定的原因,用另一存储过程生成结果也出问题,因为无法提前定义#temp1的表结构
create proc p_p1
as
insert into #temp1
exec p_qry 'aaa,bbb,ccc','2004-10-10','2004-10-11'
select * from #temp1

服务器: 消息 208,级别 16,状态 1,过程 p_p1,行 3
对象名 '#temp1' 无效。
winstar66 2004-10-24
  • 打赏
  • 举报
回复
楼上的朋友,可以说得清楚点吗?用datastore,数据源如何定义?
handycyw 2004-10-24
  • 打赏
  • 举报
回复
我觉得像这种东西可以不要使用存储过程,使用两个datastore来取数据,将取得数据填入构造好的datawindow就可以了。你创建的存储过程好像也是死的,并不灵活,这样的存储过程我个人以为还是少建的好。
winstar66 2004-10-24
  • 打赏
  • 举报
回复
用存储过程应该是没问题的,当然,你可以将结果集插入到临时表,然后在数据窗口中直接写数据窗口的源,比如select * from ##tb_temp就可以了,前提是存储过程已经执行。
-------------------------------------------------------------------------
或者说,数据窗口的数据源是不是支持表结构不固定的临时表,由于传入的参数不同,
select * from ##tb_temp的表结构是不能提前建立,这样是否可以建立数据窗口并检索数据?
winstar66 2004-10-24
  • 打赏
  • 举报
回复
基于1楼的存储过程,再建3楼的存储过程是成功的,
但在查询分析器执行出现3楼所描述的错误
估计原因是没有定义#temp1的表结构,问题是存储过程p_qry因输入参数不同,而返回的结果集的字段是不固定的,没有办法先定义#temp1的表结构,
如将insert into #temp1改为select into #temp1将无法建立存储过程p_p1
luotitan 2004-10-24
  • 打赏
  • 举报
回复
INTO 子句
创建新表并将结果行从查询插入新表中。

luotitan 2004-10-24
  • 打赏
  • 举报
回复
用select into #temp1
luotitan 2004-10-23
  • 打赏
  • 举报
回复
用存储过程应该是没问题的,当然,你可以将结果集插入到临时表,然后在数据窗口中直接写数据窗口的源,比如select * from ##tb_temp就可以了,前提是存储过程已经执行。
内容概要:本文围绕基于混沌系统与DNA编码的彩色图像加密技术展开研究,提出了一种结合混沌序列全局置乱与DNA编码高维扩散特性的复合加密方案。该方案通过分离图像的RGB三通道,利用混沌系统生成伪随机序列对像素位置进行全局置乱,并结合DNA碱基映射与运算规则对像素灰度值进行多层级扩散加密,实现了像素空间与灰度值的双重混淆。研究不仅设计了完整的加密与解密流程,还系统性地分析了算法在高斯噪声、椒盐噪声干扰下的抗噪声性能,以及在不同面积与位置裁剪攻击下的鲁棒性表现,验证了算法在密钥空间、密钥敏感性和抗攻击能力方面的优越性。; 适合人群:具备图像处理与密码学基础知识,熟悉Matlab编程,从事信息安全、数字图像处理、多媒体通信等领域的科研人员与技术人员。; 使用场景及目标:①应用于对图像传输安全要较高的场景,如军事通信、医疗影像共享、数字版权保护等,提升图像信息的保密性与抗窃听能力;②作为教学案例,帮助学生深入理解混沌系统、DNA编码在现代加密技术中的应用;③为图像加密算法的鲁棒性评估提供系统性测试框架,推动抗干扰加密技术的发展。; 阅读建议:建议读者在学习前巩固混沌系统、DNA编码及图像处理的相关理论知识,重点关注文中提出的加密流程设计与抗干扰性能测试方法。应结合提供的Matlab代码进行实践,复现加密、解密及性能分析过程,深入理解算法细节。同时,可基于本文框架探索其他混沌系统或编码方式的融合应用,以进一步提升算法性能。

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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