=======如何动态生成数据源为存储过程的数据窗口?=======

j9dai 2008-10-08 11:48:37
动态用存储过程作数据源建数据窗口,
SyntaxFromSQL 中的sqlselect参数该怎么写,
或者是presentation参数该怎么写。

execute SP_TEST(10)
在pl/sql中成功
用SP_TEST作数据源静态建dw成功
用sql动态创建dw也成功

...全文
440 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
yueyebohe 2008-10-10
  • 打赏
  • 举报
回复
mark,学习了
hangzhou6274 2008-10-09
  • 打赏
  • 举报
回复
好多的分啊,亏了,没接到
j9dai 2008-10-09
  • 打赏
  • 举报
回复
leio的方法在MSSQL里测试通过
在Oracle里用execute sp_test(参数1,参数2)也不成

在MSSQL中还可以用jdsnhan的方法,只不过规则有些不同:

string num="20",sname="受理"
sqlselect = 'execute SP_TEST;1 @num = ' + num + ',@sname = ' + SNAME

测试通过

结贴,jdsnhan和leio每人100分,剩下100大家平分
j9dai 2008-10-09
  • 打赏
  • 举报
回复
leio的方法在Oracle里不行
呆会在MSSQL里试试
j9dai 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 jdsnhan 的回复:]
带参数的存储过程一样的道理,嵌套进参数就ok

string ls_arg

ls_arg = "100" //测试参数
sqlselect = 'execute EOS.HHQUERY;0 AI_A ='+ls_Arg+'" arguments=(("AI_A", number))'

ls_Syn = sqlca.SyntaxFromSQL…
[/Quote]

嗯,可以了,3Q,准备结贴

测试成功:
1、一个参数
string num = "20"
sqlselect = 'execute SP_TEST;0 NUM = ' + num + '" arguments=(("NUM", number))'

2、多个参数
string num = "20", sname = "'受理'"
sqlselect = 'execute SP_TEST;0 NUM = ' + num + ',SNAME = ' + SNAME + '" arguments=(("NUM", number),("SNAME", string))'

leio 2008-10-09
  • 打赏
  • 举报
回复
我这里没有ORACLE环境,只有SQLSERVER2000,做了测试用SyntaxFromSQL是可以实现楼主要求的。

创建存储过程如下,存储过程里的第二个参数没任何用处,只是用来测试传递多个参数。
根据第一个参数的不同,返回结果是两个不同表的内容,字段个数、类型都不一样。

CREATE PROCEDURE dbo.get_shortmsg
@mobile char(11),@msg varchar(140)
AS
begin
set nocount on
set rowcount 20
if (substring(@mobile,1,3)>='134' and substring(@mobile,1,3)<='139')
select * from shortmessage_bak
else if (substring(@mobile,1,3)>='130' and substring(@mobile,1,3)<='133')
select * from free_mobile

set rowcount 0
set nocount off
end



建一个窗口W_MAIN,窗口上只有一个空的DW,一个按钮,一个SLE用于输入第一个参数。
按钮内代码:

string ERRORS, sql_syntax

string presentation_str, dwsyntax_str

sql_syntax = "execute get_shortmsg '"+sle_1.text+"','第二个参数'"
presentation_str = "style(type=grid)"
dwsyntax_str = SQLCA.SyntaxFromSQL(sql_syntax, &
presentation_str, ERRORS)

IF Len(ERRORS) > 0 THEN
MessageBox("Caution", &
"SyntaxFromSQL caused these errors: " + ERRORS)
RETURN
END IF

dw_1.Create( dwsyntax_str, ERRORS)

IF Len(ERRORS) > 0 THEN
MessageBox("Caution", &
"Create cause these errors: " + ERRORS)
RETURN
END IF
dw_1.settransobject(sqlca)
dw_1.retrieve()



运行后,输入不同参数,可以查询出不同的结果。
jdsnhan 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 j9dai 的回复:]
引用 24 楼 tiggerliu 的回复:
用存储过程为数据源就不能用SyntaxFromSQL啊


试过了,不带参数的存储过程是可以用SyntaxFromSQL的
带参数的就不知道怎么用了
[/Quote]

带参数的存储过程一样的道理,嵌套进参数就ok

string ls_arg

ls_arg = "100" //测试参数
sqlselect = 'execute EOS.HHQUERY;0 AI_A ='+ls_Arg+'" arguments=(("AI_A", number))'

ls_Syn = sqlca.SyntaxFromSQL ( sqlselect, "", err )

j9dai 2008-10-09
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 tiggerliu 的回复:]
用存储过程为数据源就不能用SyntaxFromSQL啊
[/Quote]

试过了,不带参数的存储过程是可以用SyntaxFromSQL的
带参数的就不知道怎么用了
j9dai 2008-10-09
  • 打赏
  • 举报
回复
顶起
guest78978 2008-10-09
  • 打赏
  • 举报
回复
学习
eastpond 2008-10-08
  • 打赏
  • 举报
回复
帮顶
j9dai 2008-10-08
  • 打赏
  • 举报
回复
类同于在pl/sql里直接调用的结果
j9dai 2008-10-08
  • 打赏
  • 举报
回复
我的目的是只需知道存储过程名和输入参数,就可以得到返回结果。
各存储过程的输入参数和返回结果集都不同,就算是同一个存储过程也有返回列数不同的时候。
xiongxiao 2008-10-08
  • 打赏
  • 举报
回复
如果过程返回的列与类型都一样,应该是可以的,用SQL语句可以动态的原因应该是,PB能识别SQL中的列,但当你换成过程后,PB的函数没法从过程中得到列,生成不了语法,这样估计就只有去分析用过程的DW的语法,全部人工生成语法了
j9dai 2008-10-08
  • 打赏
  • 举报
回复
真快^^
xiongxiao 2008-10-08
  • 打赏
  • 举报
回复
沙发
jdsnhan 2008-10-08
  • 打赏
  • 举报
回复
热闹啊,高分就是有吸引力。
现在没环境,明天到公司试试。
IMAGSE 2008-10-08
  • 打赏
  • 举报
回复
是数据映射么? 就是java中炒得很火的那个hibernate么?

恩,好东西哦~
tiggerliu 2008-10-08
  • 打赏
  • 举报
回复
用存储过程为数据源就不能用SyntaxFromSQL啊
j9dai 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 xiongxiao 的回复:]
使用procedure="1 execute PROC_GK;" arguments=(("START_DATE", datetime),("END_DATE", datetime) ) 这种格式,获取语法成功,没有测试是否可以正常获取数据了,祝楼主好运
[/Quote]

还是改syntax?
加载更多回复(16)

609

社区成员

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

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