在DELPHI中如何使用返回多个返回值的存储过程?(50分)

  • 主题发起人 yanliang
  • 开始时间
Y

yanliang

Unregistered / Unconfirmed
GUEST, unregistred user!
比如一个存储过程返回为 A1,A2,A3,我怎么样来调用这些返回值?
谢谢!
 
自行完Query1.EXECSQL后:

Edit1.text:=Query1.ParamByName('A1).AsString;
Edit2.text:=Query1.ParamByName('A2).AsString;
Edit3.text:=Query1.ParamByName('A3).AsString;
 
现在的问题是存储过程返回的是几个字段,每个字段对应于许多条记录,相当于这个存储
过程返回一张表,应该怎么做?
 
当于这个存储
过程返回一张表
这就好办了
你会不会用sql语句执行sql
如果会的话
你可以用
adoquery.sql.text :=your sql
adoquery.open;
得到你的数据
当表来访问
 
用ADO中的NextRecordset。
 
那就和adodataset一样用啊,adodataset 有的,他也有1
 
“现在的问题是存储过程返回的是几个字段,每个字段对应于许多条记录,相当于这个存储
过程返回一张表,应该怎么做?”
:你可以将这个存储过程当作普通的TDataSet来使用啊!比方存储过程名字叫SP1,则可以
如下:
var
StrA1,StrA2,StrA3:string; //假设返回字段都是String型的
with Sp1 do
begin
close;
Params.ParamByName(‘@var1’):=1;
Params.ParamByName(‘@var2’):=2;
Open;
if RecordCount<=0 then exit;
StrA1:=FieldByName('A1').AsString;
StrA2:=FieldByName('A2').AsString;
StrA3:=FieldByName('A3').AsString;
end;

OK?给分吧



 
var fp1,fp2,fp3,fp4 vartype;
var fv1,fv2,fv3:vartype;
adoquery1.active:=false;
adoquery1.sql.clear;
adoquery1.sql.text:='execute spname :p1 ,:p2 ,:p3 out ,:p4 out';//p3,p4 为返回参数
adoquery1.Parameters.ParamByName('p1').value:=fp1;
adoquery1.Parameters.ParamByName('p2').value:=fp2;
adoquery1.active:=true;
fp3:=adoquery1.Parameters.ParamByName('p3').value;//返回参数值
...
//判断返回记录集个数是否为零

if adoquery1.recordcount>0 then
begin
fv1:=adoquery1.fields[0].value;
...
end;
 
返回的结果集,你可以用fields来访问呀
然后next访问下一条。跟查询表一样处理
 
好办呀,把你的结果写进一个临时表中(或干脆建一表),然后在前台中直接访问表不就行了
 
我有有这个问题,关注!
 
一个存储过程一次不能返回多个记录,在存储过程
中你必须写上类似Suspend的语句,其含义为当返回
一个记录时存储过程挂起,等待客户端取走数据;取
完之后,继续返回下一条记录
 
顶部