怎样调用存储过程?(100+...)(100分)

  • 主题发起人 主题发起人 慕容乾坤
  • 开始时间 开始时间

慕容乾坤

Unregistered / Unconfirmed
GUEST, unregistred user!
请各位高手告诉小弟我在midas三层数据库环境中,怎样用ADO控件,在客户端调用
后端数据库中的存储过程?
请详细讲明步骤,及各控件的设置.
再给出个例子?
100+...不成敬意.
 
在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;
 
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;
 
to shsshashssha:
我已经新建了一个方法,可是将adostoredproc1的active改为true的时候,就出错。
请指点。
这是我建的方法:
procedure TAppMoudle.GetParams(var atablename: OleVariant;
var retval: OleVariant);
begin
adostoredproc1.params.parambyname('@atablename').value:=atablename;
adostoredproc1.exeproc;
retval:=adostoredproc1.params.parambyname('@vetval').value
end;

这是后端的存储过程:
CREATE PROCEDURE selecta @tablename int,@retval int output AS
select @retval=count(*) from tablename
where tablename=@tablename

这是出错信息:
procedure 'selecta' expects parameter '@tablename', which was not supplied.
 
我看看!5.30答复你
 
行,我等着.
 
首先,您用的方法是计算表中记录数,不需要设置adostoredproc1的active,只需要
使用adostoredproc1.exeproc就行了!
小结:
回传查询数据集时,调用adostoredproc1.open;
回传计算值/对数据进行操作时,调用adostoredproc1.exeproc;
另外,远程方法的参数尽量使用基本数据类型,不要用使用olevariant,系统耗费大,
应注意转换参数类型。>>
adostoredproc1.params.parambyname('@atablename').value:=vartoint(atablename);


 
也可以用ADOQuery调用
 
也可以用ADOQuery,但比不上ADOStoreProc
 
怎么调用呀?请说清楚.
具体点,在附一个小例子.
 
你用的是什么数据库?如果是Oracle,我到是可以。。别的用ADOQuery也是可以的;在服务端
的接口函数里放上存储过程中的参数,然后在客户端调用。
 
to engleking:
我用的是sql server 7.0
可不可以告诉我呢?
 
to shsshashssha:
“首先,您用的方法是计算表中记录数,不需要设置adostoredproc1的active,只需要
使用adostoredproc1.exeproc就行了!”
在客户端怎样调用adostoredproc1.exeproc呀?
我认为你的“建立方法,在客户端调用”的想法可行,但是还是不明白,
请详细讲解。(写清例子)
 
adostoredproc1.exeproc是在中间件调用
客户端:dcomconnection.appserver.method1(atablename,num)
edit1.text:=inttostr(num);//显示
 
在服务端的TypeLibrary中添加相应的方法,比如用它执行adostoreproc1.exeproc;该方法
为 AProc;
在客户端包含**_TLB.pas文件,
可以这样写:
with IUnknown(AClientDataSet.appserver) as yourIAppServerNamedo
Aproc;
 
to 慕容乾坤
明白了吗?
 
to shsshashassha:
我还是没有调通,等我总结一下再问你.怎么样?
 
to shsshashssha:
我实在受不了了,不论我怎么调试和修改都通不过,我都快失去信心了。
现在只好请你给我个例子了,我用SQL Server 7.0数据库,用ADO连接,
用DCOM通讯,用DELPHI5做前端,程序是三层的,用MIDAS技术。
请你做个小例子,别的不用实现,只要在客户端执行个存储过程就行。
我只要看看配置的参数什么的。另存储过程的源码写给我就行了。
一定要在你的机器上运行通过呦。还有我要实现诺言,此题再加100分。
请你一定帮忙,谢谢。
 
干脆,你留个邮箱地址给我,我把例子寄给你!!!
 
后退
顶部