三层结构中的存储过程(50分)

  • 主题发起人 主题发起人 liounzhou
  • 开始时间 开始时间
L

liounzhou

Unregistered / Unconfirmed
GUEST, unregistred user!
小子是个Delphi初学者,有很多问题不懂。还请各位大虾多多指点。
我在客户端用ClientDataSet连接到服务器端的DataSetProvider,从而连上
数据库中的一个存储过程,请问我该怎么在客户端使用这个存储过程呢?(包括
传叁数和接受结果)
 
用clientdataset.fetchparams传(执行参数,回传参数)
或直接用远程方法比较好
在服务器端用adostoredproc控件接受参数
adostoredproc.exeproc
然后回传结果到客户端
 
看存储过程不同而不同,没有统一的。。。
 
to shsshashssha:
传参数的方法我知道了,那么传参以后,我怎么在clientdataset中执行存储过程呢?
adostoredproc.exeproc是在服务器端执行的吧?
最后还有一点,就是怎么接受回传的参数啊?我还是不太明白。
有没有一个简单的例子呢?
 
adostoredproc.exeproc是在服务器端执行
clientdataset只负责传参数和接受结果
可以在fetchparams中设置回传参数,clientdataset.open/exesql后可以从clientdataset
的params集合中取得回传结果;不过最好写远程方法,形如:
client:dcomconnection.appserver.method1(执行参数,var 回传参数)
server method1(执行参数,var 回传参数);
begin
adostoredproc.params.parambyname('参数名').value:=执行参数/回传参数
adostoredproc.exeproc;
最后 回传参数:=adostoredproc.params.parambyname('回传参数名').value
end;


例子,请你等等吧!
 
在sql server中定义一个存储过程
CREATE PROCEDURE selecta @a int,@retval int output AS
select @retval=count(*) from a
where a =@a

客户端:
var
i:integer;
i:=strtoint(edit1.text)//从edit1.text输入数据
edit2.text:=inttostr(dcomconnection.appserver.update(i));
//edit2.text显示执行结果
//
服务器端
function TDM_update.update(a:Integer):integer;
begin
ADOStoredProc1.Parameters.ParamByName('@a').value:= a;//查询参数
ADOStoredProc1.Parameters.ParamByName('@Retval').value:= 0;
ADOStoredProc1.ExecProc;
result:=ADOStoredProc1.Parameters.ParamByName('@retval').value;//回传结果

end;

 
接受答案了.
 
后退
顶部