请教!存储过程--返回参数或返回集合的问题!120分!!!(120分)

  • 主题发起人 主题发起人 weiqiuqiu
  • 开始时间 开始时间
W

weiqiuqiu

Unregistered / Unconfirmed
GUEST, unregistred user!
如下存储过程
create proc krrh01 @czyh char(5),
@czymm char(30)
as
declare @mm char(30),
@xm char(8),
@czydw char(5),
@czyzt char(1),
@qxrq smalldatetime,
@jb char(2),
@dwmc char(30)
select @xm=czymc,@czydw=czydw,@czyzt=czyzt,@qxrq=qxrq,

@mm=czymm,@jb=czyjb
from czyb
where @czyh=czydh

if @@rowcount=0
return 100 --无此操作员

if @qxrq!=NULL
return 101 --操作员已取消

if @czyzt!='0'
return 102 --操作员状态异常

if rtrim(@mm)!=rtrim(@czymm)
return 103 --密码不符

select @dwmc=dwmc
from dwmcb
where dwdh=@czydw

if @@rowcount=0
return 201 --无此单位

create table #ttt(xm char(8), czydw char(5), dwmc char(30))
insert into #ttt values(@xm,@czydw,@dwmc)
select * from #ttt
return 0
该存储过程可能返回结果集合(ttt表)也可能不返回结果集(返回参数100,101,102),如何使用DELPHI的控件调用该存储过程并取返回? 我用STOREDPROC的OPEN和EXECPROC或QUERY的OPEN和EXECSQL都报错.在SYBASE中是用游标
取结果.
 
try
StoredProcedure1.Open;
except
case StoredProcedure1.ParamByName('Result').AsInteger of
100:
101:
102:
103:
201:
else
end;
end;
 
NO,NO.xWolf君的答案回提示,游标错!
而且存储过程中:create table #ttt(xm char(8), czydw char(5), dwmc char(30))
insert into #ttt values(@xm,@czydw,@dwmc)
select * from #ttt
后的结果取不回来.
 
StoredProc1.close;
StoredProc1.params[0]:='00001';
StoredProc1.params[1]:='name';
try
StoredProc1.open;
except
raise exception.create('error');
end;
 
就是说该存储过程有可能返回reTURN_VALUES,也有可能返回一个结果集.
 
ps:如果storedproc用open打开,显示 create cursor error,如果用execproc打开,显示try to operate on a close dataset.而在unix下sybase的db-lib/c是使用dbbind来取值
 
这种玩法真没见过。不过如果你不返回100,101什么的,应该就好做了吧。
设置一个@rslt=100 or 101 ...
然后
insert into #ttt values(@rslt,@xm,@czydw,@dwmc)
select * from #ttt

这样可以么?
 
在UNIX下处理该类存储过成很简单,没向到delphi下这么费经.....
 
多人接受答案了。
 
后退
顶部