存储过程如何调用?(50分)

  • 主题发起人 主题发起人 dlin
  • 开始时间 开始时间
D

dlin

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个存储过程SP1(VAR1;VAR2);
请问如何实现调用sp1,且每次var1,var2 不同。
 
Query1.SQL.Text:='Execute SP1(:Var1;:Var2)';
Query1.Prepare;
for i:=0 to n do
begin
Query1.ParamByName('Var1').AsInteger:=.....
Query1.ParamByName('Var2').AsInteger:=.....
Query.ExecSQL;
end;

也可使用TStoredProc控件.

 
建议用TStoredProc控件.
StoredProc1.StoredProcName :='你的储存过程名';
StoredProc1.execproc;

 
我用的是存储过程:
with 存储过程名 do
begin
Params.Clear;
p1:=Tparam.create(params,ptinput);
p2:=Tparam.create(params,ptinput);
p3:=Tparam.create(params,ptinput);
p4:=Tparam.create(params,ptoutput);
p5:=Tparam.create(params,ptoutput);
params[0].Name:='@code';
params[0].dataType:=ftstring;
params[0].ParamType:=ptinput;
params[1].Name:='@storehource';
params[1].dataType:=ftstring;
params[1].ParamType:=ptinput;
params[2].Name:='@into_store_amount';
params[2].dataType:=ftinteger;
params[2].ParamType:=ptinput;
params[3].Name:='@enough';
params[3].dataType:=ftinteger;
params[3].ParamType:=ptinputoutput;
params[4].Name:='@leave_amount';
params[4].dataType:=ftinteger;
params[4].ParamType:=ptinputoutput;
//动态建立参数

//使用存储过程
//Params[0]为传进参数,Params[1],Params[2]为传出参数
Params.ParamByName('@***').asstring:=dbedit1.Text;
Params.ParamByName('@***').asstring:=dbcombobox1.Text;
Params.ParamByName('@***').asinteger:=strtoint
(DBComboBox2.Text);
Execute;
....
....
 
给参数付值
Params.ParamByName('@code').asstring:=dbedit1.Text;
Params.ParamByName('@storehource').asstring:=dbcombobox1.Text;
Params.ParamByName('@into_store_amount').asinteger:=strtoint(DBComboBox2.Text);
Execute;
 
我还有什么说的呢,你们都说了?
把分给上面的几位老兄吧
 
1、可以使用TStoredProc,使用ParamByName来赋值,同样使用ParamByName得到返回值。
2、可以使用TQuery,在Query中写Execute 存储过程名 :参数1...
 
最简单的方法是在TQuery中用:
Query1.SQL.Text:='Execute SP1(参数1, 参数2)';
参数1 和 参数2怎么改动都行。
 
多人接受答案了。
 
后退
顶部