如何用 quey 动态地调用 SQLSERVER 2000 的存储过程?存储过程中有输入输出参数,输出参数为整数。
请各位高手多多指教。
使用ADOSTOREDPROC就可以了。
动态创建它就行
var
p:tadostoredproc;
my_fwreateb,my_fwreates:double;
begin
p := TADOStoredProc.Create(self);
p.Connection := dmform.ADOConnection1;
p.ProcedureName := payfee;//存储过程名
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;//输入参数
Value := HZNo ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;
Value := MZNo ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;
Value := SPNo ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftfloat;
Direction := pdinput;
Value := strtofloat(SPCnt) ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;
Value := SPU ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftfloat;
Direction := pdinput;
Value := strtofloat(SPPe) ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;
Value := Staffno ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;
Value := JYNo ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftstring;
Direction := pdinput;
Value := JYLS ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftinteger;
Direction := pdinput;
Value := 0 ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftinteger;
Direction := pdinput;
if huipino = then
begin
Value := 0;
end
else
begin
Value := strtoint(huipino) ;
end;
end;
with p.Parameters.AddParameter do
begin
DataType := ftinteger;
Direction := pdoutput;//输出参数
Name := retval ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftfloat;
Direction := pdoutput;
Name := fwrateb ;
end;
with p.Parameters.AddParameter do
begin
DataType := ftfloat;
Direction := pdoutput;
Name := fwrates ;
end;
p.ExecProc ;
ret := p.Parameters.ParamValues[retval];//存储过程返回值
my_fwreateb:=p.p.Parameters.ParamValues[fwrateb]; //输出参数
my_fwreates:=p.p.Parameters.ParamValues[fwrates]; //输出参数
p.free;
本来很简单的问题非要搞的这么复杂!
通过ADOQuery.SQL.Add(exec spproc 参数一,参数二);
具体参看SQL的帮助
然后
ADOQuery.Execute;
如果有返回值也就是有输出参数,那么大不了存储过程最后一行加入
SELECT 参数1,参数2,参数3
然后通过adoquery.fieldbyname就可以调用了
只有输入参数的话,很简单
ADOQuery.SQL.Add(Exec MySP :参数一,:参数二);
ADOQuery.Parameters.ParamByName(参数一).Value:=AAAA;
或Query.ParamByName(参数一).AsInteger:=AAAA;
如果有输出参数的话,稍微麻烦一点
Query.SQL.Add(declare @OP1 int,@OP2 int);
Query.SQL.Add(Exec MySP :参数一,:参数二,@OP1 output,@OP2 output );
Query.SQL.Add(select OP1=@OP1,OP2=@OP2 );
Query.Open;