存储过程出错!(30分)

  • 主题发起人 主题发起人 kscitic
  • 开始时间 开始时间
K

kscitic

Unregistered / Unconfirmed
GUEST, unregistred user!
调用存储过程出现:"Command Text doest not return a result set"但是我发现存储过程
中处理的结果已经存入表中了,我看了数据库了.什么问题?
调用是我是这样写的:
procedure TForm3.Button1Click(Sender: TObject);
begin
dm.proce.open;
dm.proce.close;
end;
我的存储过程如下:
CREATE procedure dszh_procedure
as
declare @id int,@jyje float,@zhye float,@idbs char(1),@jyrq datetime,@hm char(40),@sh char(7),@zh char(19)
select @jyje=0
select @zhye=0
select @id=0
declare dszh_cursor cursor for
select ckmxwj.jyje,ckmxwj.zhye,ckmxwj.jdbs,ckmxwj.jyrq,dszhmodal.hm,dszhmodal.sh,dszhmodal.zh from ckmxwj,dszhmodal where dszhmodal.zh=ckmxwj.ckzh
open dszh_cursor
fetch dszh_cursor into @jyje,@zhye,@idbs,@jyrq,@hm,@sh,@zh
while @@FETCH_STATUS =0
begin
select @id=@id+1
if @idbs='D'
select @jyje=-@jyje
insert into dszh(id,sh,rq,fse,ye,zh,hm) values(@id,@sh,@jyrq,@jyje,@zhye,@zh,@hm)
fetch dszh_cursor into @jyje,@zhye,@idbs,@jyrq,@hm,@sh,@zh
end
close dszh_cursor
 
dm.proce.ExecProc

 
又出现个问题,我执行过一次过后,再次执行也就是再次执行(代码如下)提示我:dszh_cursor游标已经
建立,的提示但是我确实在存储过程最后释放掉游标了呀!什么地方出错.
procedure TForm3.Button1Click(Sender: TObject);
begin
dm.proce.ExecProc;
dm.proce.close;
end;
 
close dszh_cursor
后加入
DEALLOCATE dszh_cursor
 
CREATE PROCEDURE proc_temp
as
declare @hm char(20),@address char(50),@name1 char(50)
declare cur cursor for
select hm,zh from dszh
open cur
fetch cur into @address,@name1
while @@FETCH_STATUS=0
begin
select @hm=@address+':' //这句句子在存储过程中怎么不起作用啊?我是要在@ADDRESS
后面加个冒号的,在下一句UPDATE句中为什么不成功?
update dszh set hm=@hm where zh=@name1
fetch cur into @address,@name1
end
close cur
deallocate cur
 
因为@hm是20个字符的定长字符串,而@address是50个字符的定长字符串,@address+':'后是
一个51个字符的字符串,把这个字符传赋给@hm,只能得到前20个字符。你用变长字符串varchar,
当@address的长度小于20时加上冒号可以赋给@hm
 
后退
顶部