高分请教存储过程问题(急!!!)

leexiaobao 2002-04-18 10:25:39
在pb中调用ms sqlserver存储过程,此过程执行一个插入语句。如果传入参数不合法,会引起外键错误。在过程中将返回值设为自定的返回值,并且返回自定的错误信息。如果用query analyze去调用,能够得到这个返回值和错误信息,但当用pb时,无法得到错误信息和返回值,我想可能是当pb收到sqlserver的外键错误后,就不再去取得output参数的内容。请问各位高手,有没有好的解决办法。
...全文
34 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
leexiaobao 2002-04-23
  • 打赏
  • 举报
回复
存储过程是在sqlserver上执行的,并不是由pb执行的,pb只是传入参数取出参数而已,所以if ( @@error<>0 )肯定执行了,但pb可能在受到sqlserver的msg handler的时候,它不接受传出参数的值。
是不是这样的?
kaikaihe 2002-04-23
  • 打赏
  • 举报
回复
在PB中调用的存储过程的语句if ( @@error<>0 )是不会执行的
leexiaobao 2002-04-23
  • 打赏
  • 举报
回复
再sqlserver得query analyze中执行可以得到错误代码和返回值的
jaguarcts 2002-04-22
  • 打赏
  • 举报
回复
你在查询分析器中执行过程输入数据试一试?
dlook 2002-04-22
  • 打赏
  • 举报
回复
可以用raiserror返回,
例如在存储过程中写
……
raiserror 65000 '错误,请检查!!'
return
……
然后,在pb中用sqlca.sqlerrtext,就可以读到这个错误,这样系统的报错和你的报错,都可看到。不知道,我这样说,你是否明白
leexiaobao 2002-04-22
  • 打赏
  • 举报
回复
可能我的意思大家没有搞明白。我再重复一下我的问题。请各位再次从头来过。

例如:
在数据库中有一张表test,字段为a1, a2。a2限制不能为空。有一个存储过程
add_data :
// ******
insert test( a1 ) values( @a1 )
if ( @@error<>0 )
begin
select @ErrMsg='插入失败'
select @ret_val=100
return ret_val
end
// ********
因为a2限制不能为null, 因此执行此存储过程时,sqlca.sqlcode返回不等于0
这时,你如果取返回参数,会发现返回参数没有返回。

我在这里只是将问题简化了一下,我实际遇到的问题是当修改数据时,碰到了违反外键的约束,修改数据会失败。但我想返回我自己的错误提示,却得不到自己定义的错误代码和错误信息。

那位朋友遇到同样的问题,能否指点一下?上边的这些朋友,请自己做一下试验。
swjtu95 2002-04-19
  • 打赏
  • 举报
回复
给你个例子:

SQL SERVER:
DECLARE MySP PROCEDURE FOR sp_create_projectcode
@year=:ls_year,//输入参数
@industrycode=:ls_industrycode,//输入参数
@No=:is_pk_value OUTPUT;//输出参数
EXECUTE MySP;
if sqlca.sqlcode =0 then
Fetch Mysp Into :is_pk_value;
Else
MessageBox("系统提示","项目编码生成不正确")
Return
end if
close mysp;
anakine 2002-04-19
  • 打赏
  • 举报
回复
在PB中调用完存储过程后,也要fetch 一下才能得到返回值.
powerbu 2002-04-19
  • 打赏
  • 举报
回复
不可能

一定是你你在PB中调用MS存储过程的语法不对。
Eric2000 2002-04-18
  • 打赏
  • 举报
回复
???帮你up

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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