执行存储过程为什么没有返回值? 所有积分拱手相送。。。 (50分)

  • 主题发起人 主题发起人 rufeng
  • 开始时间 开始时间
R

rufeng

Unregistered / Unconfirmed
GUEST, unregistred user!
我用storedproc1 连sybase数据库,结果没有返回值。
with storedproc1do
begin
close;
OpenDatabase;
Params.Clear;
StoredProcName:='dbo.user_get_twofingerno;1';
Params.CreateParam(ftfloat,'@i_count',ptinput);
Params.CreateParam(ftstring,'@o_first_no',ptoutput);
Params.CreateParam(ftstring,'@o_second_no',ptoutput);
params[0].Size:=10;
params[0].NumericScale:=0;
params[1].Size:=13;
params[2].size:=13;
params[0].Value :=s_count;
prepare;
//try
execproc;
t_no:=parambyname('@o_first_no').asstring ;
m_no:=parambyname('@o_second_no').AsString ;
messagebox(0,pchar(t_no),'1',mb_ok);
result:=true;
// except
unprepare;
close;
result:=false;
存储过程如下:
CREATE PROCEDURE dbo.user_get_twofingerno
@i_count numeric(13,0),@o_first_no char(13) output,@o_second_no char(13) output
AS
declare @no_count numeric(13,0)
declare @no char(13)
declare @ii int
begin

declare cur1 cursor for select finger_no fromdo
n_record_fingerprint order by finger_no
open cur1
select @ii=0
select @no_count=0
while (@@sqlstatus!=2) and (@ii<>2)
begin

fetch cur1 into @no
select @no_count=@no_count+1

if @no_count=@i_count
begin
select @o_first_no=ltrim(rtrim(@no))

end
else
if @no_count=2*@i_count
begin
select @o_second_no=ltrim(rtrim(@no))
select @ii=2

end

end

close cur1
deallocate cursor cur1
END
return
我用storeproc1.open时,报error creating cursor handle!
请富翁们帮我看看!
 
怎么大家光看,不发言啊,用execproc没有返回值,而存储过程实际测试有返回值。
open又打不开,怎么办啊,我已经调了半天了,就是解决不了,各位帮忙吧。
 
各位高手,帮帮忙吧,就是无法取得返回值,用open又报错,指点一下吧,所有积分拱手相送!
 
databasename 设置好没有!对应存储过程名在数据库中是否正确!
 
已经设置好。
with storedproc1do
begin
close;
databasename:=database1.DatabaseName;
//OpenDatabase;
end;
存储过程已经执行,要有返回结果,是不是要用open,不用execproc,但报error creating cursor handle!的错误。我是sybase12.5。各位救小弟一次啊,千万拜托。
 
各位,小弟找到答案了,原因如下:
关键在存储过程的写法有问题。
常规下,这样写,在sqladvate.exe中能返回正确结果,但在delphi下不能。
应改成:
open cur1
...
fetch cur1 into @no//在此取编号。
while (@@sqlstatus!=2) and (@ii<>2)
begin


-- fetch cur1 into @no//不能在此用。
select @no_count=@no_count+1
if @no_count=@i_count
begin
select @o_first_no=ltrim(rtrim(@no))

end
else
if @no_count=2*@i_count
begin
select @o_second_no=ltrim(rtrim(@no))
select @ii=2

end
fetch cur1 into @no//取下一个编号。
end
找出问题是使用了 raiserror进行存储过程的错误追踪。
好了,感谢大家,我的qq:56162154.欢迎同行进行交流。
 
接受答案了.
 
后退
顶部