关于VF+SQL中的存储过程返回值问题。

myperry 2003-02-12 12:35:25
一:我在SQL7上建立了一个存储过程如下:
CREATE PROCEDURE [del_tr_chpch] @chpchid31 int,@Your31 char(1) output
AS
begin
declare @id31 bit
select @id31 = dj from tr_chpch where (chpchid = @chpchid31)

if @id31 = 0
begin
delete from tr_chpch where (chpchid = @chpchid31)
set @Your31 = '0'
end else
set @Your31 = '1'
end

二:我在VF端的调用如下:
chpchid31 = tr_chpch.chpchid
m1 = ''
sqlcom31='exec del_tr_chpch '+ ' ?chpchid31' +', ?@m1'
=SQLEXEC(myconnect,sqlcom31)
IF m1 = '0'
WAIT "删除成功!" WINDOW AT 17,45 NOWAIT TIMEOUT 1
ELSE
MESSAGEBOX('此记录未能删除!')
ENDIF

三:结果是:
在VF中的m1的值始终是m1 = ''

但是如果现在删除掉存储过程中的delete from tr_chpch where (chpchid = @chpchid31)这一句,
则在VF中的m1的值就会返回m1='0'或m1='1' 。

请问这是为什么?到底是存储过程写错了,还是vf中的调用语句写错了?
...全文
113 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fongming 2003-04-29
  • 打赏
  • 举报
回复
up
流星尔 2003-02-12
  • 打赏
  • 举报
回复
CREATE PROCEDURE [del_tr_chpch] @chpchid31 int
AS
declare @Your31 char(1)

begin
declare @id31 bit
select @id31 = dj from tr_chpch where (chpchid = @chpchid31)

if @id31 = 0
begin
delete from tr_chpch where (chpchid = @chpchid31)
set @Your31 = '0'
end else
set @Your31 = '1'
end
select @your31

vfp端
sqlexec(jb,"exec procname para1,para2","cursorname")
sele cursorname
brow
流星尔 2003-02-12
  • 打赏
  • 举报
回复
你把我的那段存储过程覆盖你原来的。然后把vfp端改成
paraname=5
sqlexec(jb,"exec del_tr_chpch ?paraname","cursorname")
sele cursorname
brow

我已经把你的存储过程改成一个参数了,但仍然传了两个参数给它。所以错了。
流星尔 2003-02-12
  • 打赏
  • 举报
回复
确定你在存储过程中加入了select @your31,这句要防在存储过程的最后

然后在vfp端参数前加入了问号。调用方法为
paraname=5
sqlexec(jb,"exec del_tr_chpch ?paraname","cursorname")
sele cursorname
brow
myperry 2003-02-12
  • 打赏
  • 举报
回复
我用了以下语句
m1=sqlexec(jb,"exec procname para1,para2","cursorname")
sele cursorname
brow

测试到m1=1了,但是还会提示cursorname不存在

但是如果将delete from tr_chpch where (chpchid = @chpchid31)删除后,以可以看到cursorname表了。
同时:原存储过程在Query中测试时,一切正常。

请问到底是那里错了?

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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