三层结构中如何向SQL SERVER的存储过程传递参数?(200分)

  • 主题发起人 主题发起人 kingtiger
  • 开始时间 开始时间
K

kingtiger

Unregistered / Unconfirmed
GUEST, unregistred user!
我在SQL Server中有一个存储过程,需要传入三个参数,中间层中用了
ADOStoredProc和DataSetProvider,客户端使用Dcom,ClientDataSet,
ClientDataSet对应通过中间层的DataSetProvider对应ADOStoredProc。
请问:在Open或Execute ClientDataSet时,如何出入存储过程需要的三个参数?
我试过使用ADOQuery,SQL参数可以通过OleVariant在客户端和中间层传递,但我不知道ADOStoredProc如何处理。
多谢!
200大洋敬送。
 
$(delphi)/demos/midas/Setparam/*.dpr
 
看看有没有帮助:
with HaoShunLuDM.check_sales_table_amount_SP_client(存储过程名)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;
//动态建立参数

//使用存储过程Check_sales_table_insert,
//Params[0]为传进参数,Params[1],Params[2]为传出参数
Params.ParamByName('@code').asstring:=dbedit1.Text;
Params.ParamByName('@storehource').asstring:=dbcombobox1.Text;
Params.ParamByName('@into_store_amount').asinteger:=strtoint(DBComboBox2.Text);
Execute;
if Params.ParamByName('@enough').asinteger=0
then
begin
showmessage('编码:'+dbedit1.text+',仓号:'+dbcombobox1.text
+'的库存只有'+Params.ParamByName('@leave_amount').asstring+'双,不够出售!');
DBEdit1.Text:='';
DBEdit2.Text:='';
DBEdit3.Text:='';
DBEdit4.Text:='';
DBEdit8.Text:='';
DBComboBox1.Text:='';
DBComboBox2.Text:='';
DBEdit1.SetFocus;
end
 
这是客户端调用时的代码,我都是这样用的
 
我试过多次,客户端不会自动显示参数名和参数类型等属性,但通过动态产生参数是
可以的,不过参数个数,类型必须一一对应。
 
To'我试过使用ADOQuery,SQL参数可以通过OleVariant在客户端和中间层传递,但我不知道ADOStoredProc如何处理。'
为什么参数要用中间层传递?客户端用
clientdataset1.FetchParams 就完全可以达到你的需要,
对于ADOStoredProc,ADOquery均有效.

 
接受答案了.
 
后退
顶部