在pb里面怎么调用sqlserver的带output参数的存储过程

Fancy_Free 2005-03-14 11:16:15
存储过程如下
if exists(select * from sysobjects where type='P' and name='SerialNo')
drop procedure SerialNo
go
create procedure SerialNo
@cSerialNo varchar(3) output
with encryption
as
begin
if exists(select * from bas_resourcepaper)
begin
select @cSerialNo=convert(varchar(3),max(convert(int,cSerialNo))+1) from table1
set @cSerialNo=replicate('0',3-len(@cSerialNo))+@cSerialNo
end
else
begin
set @cSerialNo='001'
end
end

以下是pb里面的调用
Long ll_Row
String ls_cSerialNo

DECLARE Procedure_1 PROCEDURE FOR SerialNo
@cSerialNo=:ls_cSerialNo OUTPUT;
EXECUTE Procedure_1 ;
CLOSE Procedure_1;

ll_Row=Dw_1.InsertRow(0)
Dw_1.SetItem(ll_Row,'cSerialNo',ls_cSerialNo)
可是却得不到结果,结果为空,请大家帮我分析一下
...全文
1429 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Fancy_Free 2005-03-26
  • 打赏
  • 举报
回复
存储过程如下
if exists(select * from sysobjects where type='P' and name='SerialNo')
drop procedure SerialNo
go
create procedure SerialNo
@cSerialNo varchar(3) output
with encryption
as
begin
if exists(select * from bas_resourcepaper)
begin
select @cSerialNo=convert(varchar(3),max(convert(int,cSerialNo))+1) from table1
set @cSerialNo=replicate('0',3-len(@cSerialNo))+@cSerialNo
end
else
begin
set @cSerialNo='001'
end
end

以下是pb里面完整的调用
我是把突然全局sqlca的值改成了tran1,使用的connect using sqlca连接的
Long ll_Row
String ls_cSerialNo=Space(3),ls_temp=''

If Dw_1.GetRow()>0 Then
ls_temp=Dw_1.Object.cPaperserialno[Dw_1.GetRow()]
End If
ls_cSerialNo=String(Sqlca.SerialNo(ls_temp))
ll_Row=Dw_1.InsertRow(0)
Dw_1.SetItem(ll_Row,'cSerialNo',ls_cSerialNo)
Dw_1.ScrollToRow(ll_Row)

可是却得不到结果,结果值为0,请大家帮我分析一下
luckybobo 2005-03-26
  • 打赏
  • 举报
回复
学习!!
lzheng2001 2005-03-26
  • 打赏
  • 举报
回复
你应该为ls_temp赋初值! 而不是ls_cSerialNo!
string ls_temp=space(3)

这样就可以解决了!
Fancy_Free 2005-03-23
  • 打赏
  • 举报
回复
我是把突然全局sqlca的值改成了tran1,使用的connect using sqlca连接的,不行
freechinapi 2005-03-23
  • 打赏
  • 举报
回复
你试试把sqlca的autocommit属性改成False(True)试试~~~具体改什么我忘了
lzheng2001 2005-03-23
  • 打赏
  • 举报
回复
可以的,你细心试试吧! 或贴出完整的代码来
lzheng2001 2005-03-21
  • 打赏
  • 举报
回复
要执行了connect using tran1;这句才能执行functionName的! 当然前面还有设置tran1的连接参数,就好象SQLCA一样呀,你试试吧不会有问题的
Fancy_Free 2005-03-21
  • 打赏
  • 举报
回复
是不是sql写得有问题,ls_out赋了初始值怎么ls_out还是返回'',不能直接执行tran1.functionName(ls_out),要把salca的值改成tran1,才能执行sqlca.functionName(ls_out),但是sqlcq.functionName(ls_out)返回0,什么问题呢?
lzheng2001 2005-03-18
  • 打赏
  • 举报
回复
定义变量的时候应该给个初始值,然后再调用 function
string ls_out space(3)
tran1.functionName(ls_out)
Fancy_Free 2005-03-18
  • 打赏
  • 举报
回复
devil_heart(心魔) 的方法可以,做到transaction对象的local external function里面的时候返回值不是null而是0,也不正确
devil_heart 2005-03-17
  • 打赏
  • 举报
回复
Long ll_Row
String ls_cSerialNo
DECLARE Procedure_1 PROCEDURE FOR SerialNo
@cSerialNo=:ls_cSerialNo OUTPUT;
EXECUTE Procedure_1 ;
fetch Procedure_1 into :ls_cSerialNo;
CLOSE Procedure_1;
messagebox("",ls_cSerialNo)

两个人合起来才是正确的 :)
li_d_s 2005-03-17
  • 打赏
  • 举报
回复
做到transaction对象的local external function里面去试试看
Fancy_Free 2005-03-17
  • 打赏
  • 举报
回复
有没有人帮我啊?
Fancy_Free 2005-03-16
  • 打赏
  • 举报
回复
我试了一下,还是没有返回值,在查询分析器里面执行的话可以得到返回值,所以应该不是存储过程的错,问题应该在pb的调用上面
Fancy_Free 2005-03-15
  • 打赏
  • 举报
回复
自己顶一下
sunkinglcq 2005-03-15
  • 打赏
  • 举报
回复
上面老兄的方法就可以了
如果不行试试将Dw_1.SetItem(ll_Row,'cSerialNo',ls_cSerialNo)
修改为Dw_1.SetItemstring(ll_Row,'cSerialNo',ls_cSerialNo)
li_d_s 2005-03-15
  • 打赏
  • 举报
回复
DECLARE Procedure_1 PROCEDURE FOR SerialNo
EXECUTE Procedure_1 ;
fetch Procedure_1 into :ls_cSerialNo;
CLOSE Procedure_1;

或者做到transaction对象的local external function里面去

743

社区成员

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

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