慕 慕容乾坤 Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-27 #1 请各位高手告诉小弟我在midas三层数据库环境中,怎样用ADO控件,在客户端调用 后端数据库中的存储过程? 请详细讲明步骤,及各控件的设置. 再给出个例子? 100+...不成敬意.
S shsshashssha Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-27 #2 在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;
在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;
S shsshashssha Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-27 #3 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;
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;
慕 慕容乾坤 Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-29 #4 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.
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.
S shsshashssha Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-30 #7 首先,您用的方法是计算表中记录数,不需要设置adostoredproc1的active,只需要 使用adostoredproc1.exeproc就行了! 小结: 回传查询数据集时,调用adostoredproc1.open; 回传计算值/对数据进行操作时,调用adostoredproc1.exeproc; 另外,远程方法的参数尽量使用基本数据类型,不要用使用olevariant,系统耗费大, 应注意转换参数类型。>> adostoredproc1.params.parambyname('@atablename').value:=vartoint(atablename);
首先,您用的方法是计算表中记录数,不需要设置adostoredproc1的active,只需要 使用adostoredproc1.exeproc就行了! 小结: 回传查询数据集时,调用adostoredproc1.open; 回传计算值/对数据进行操作时,调用adostoredproc1.exeproc; 另外,远程方法的参数尽量使用基本数据类型,不要用使用olevariant,系统耗费大, 应注意转换参数类型。>> adostoredproc1.params.parambyname('@atablename').value:=vartoint(atablename);
D devecom Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-01 #9 也可以用ADOQuery,但比不上ADOStoreProc
E engleking Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-02 #11 你用的是什么数据库?如果是Oracle,我到是可以。。别的用ADOQuery也是可以的;在服务端 的接口函数里放上存储过程中的参数,然后在客户端调用。
慕 慕容乾坤 Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-02 #12 to engleking: 我用的是sql server 7.0 可不可以告诉我呢?
慕 慕容乾坤 Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-02 #13 to shsshashssha: “首先,您用的方法是计算表中记录数,不需要设置adostoredproc1的active,只需要 使用adostoredproc1.exeproc就行了!” 在客户端怎样调用adostoredproc1.exeproc呀? 我认为你的“建立方法,在客户端调用”的想法可行,但是还是不明白, 请详细讲解。(写清例子)
to shsshashssha: “首先,您用的方法是计算表中记录数,不需要设置adostoredproc1的active,只需要 使用adostoredproc1.exeproc就行了!” 在客户端怎样调用adostoredproc1.exeproc呀? 我认为你的“建立方法,在客户端调用”的想法可行,但是还是不明白, 请详细讲解。(写清例子)
S shsshashssha Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-03 #15 adostoredproc1.exeproc是在中间件调用 客户端:dcomconnection.appserver.method1(atablename,num) edit1.text:=inttostr(num);//显示
adostoredproc1.exeproc是在中间件调用 客户端:dcomconnection.appserver.method1(atablename,num) edit1.text:=inttostr(num);//显示
E engleking Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-04 #16 在服务端的TypeLibrary中添加相应的方法,比如用它执行adostoreproc1.exeproc;该方法 为 AProc; 在客户端包含**_TLB.pas文件, 可以这样写: with IUnknown(AClientDataSet.appserver) as yourIAppServerNamedo Aproc;
在服务端的TypeLibrary中添加相应的方法,比如用它执行adostoreproc1.exeproc;该方法 为 AProc; 在客户端包含**_TLB.pas文件, 可以这样写: with IUnknown(AClientDataSet.appserver) as yourIAppServerNamedo Aproc;
慕 慕容乾坤 Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-05 #18 to shsshashassha: 我还是没有调通,等我总结一下再问你.怎么样?
慕 慕容乾坤 Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-05 #19 to shsshashssha: 我实在受不了了,不论我怎么调试和修改都通不过,我都快失去信心了。 现在只好请你给我个例子了,我用SQL Server 7.0数据库,用ADO连接, 用DCOM通讯,用DELPHI5做前端,程序是三层的,用MIDAS技术。 请你做个小例子,别的不用实现,只要在客户端执行个存储过程就行。 我只要看看配置的参数什么的。另存储过程的源码写给我就行了。 一定要在你的机器上运行通过呦。还有我要实现诺言,此题再加100分。 请你一定帮忙,谢谢。
to shsshashssha: 我实在受不了了,不论我怎么调试和修改都通不过,我都快失去信心了。 现在只好请你给我个例子了,我用SQL Server 7.0数据库,用ADO连接, 用DCOM通讯,用DELPHI5做前端,程序是三层的,用MIDAS技术。 请你做个小例子,别的不用实现,只要在客户端执行个存储过程就行。 我只要看看配置的参数什么的。另存储过程的源码写给我就行了。 一定要在你的机器上运行通过呦。还有我要实现诺言,此题再加100分。 请你一定帮忙,谢谢。
S shsshashssha Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-06 #20 干脆,你留个邮箱地址给我,我把例子寄给你!!!