另外?:
        DCOM 中有狀態的和無狀態的,有何不同!

解决方案 »

  1.   

    謝謝,那我想請問: 為什麼DCOM 和SocketConnection不可以 是否可以使用帶參數的有返回值的存儲過程呢?
      

  2.   

    答案是可以的!测试环境:Oracle9i Delphi7 ADO SocketConnection--表
    create table tab1(id number,bookname varchar(10))--插入记录
    insert into tab1 values(1,'book_name')--过程
    create or replace procedure p(v1 in number,v2 out varchar) is
    begin
      select bookname into v2 from tab1 where id = v1 and rownum <= 1;
    end;--在Oracle中测试
    set serveroutput ondeclare
      result tab1.bookname%type;
    begin
      p(1,result);
      dbms_output.put_line(result);
    end;显示book_name--服务器端程序
    在Delphi7中创建Remote Data Module,放入ADOConnection1,ADOStoredProc1,DataSetProvider1控件,设置好数据库连接和ADOStoredProc1的两个参数(一个名称叫v1,input类型,另一个名称叫v2,output类型),打开ScktSrvr.exe,端口为默认的211。--客户端程序
    创建工程,设置好SocketConnection1和ClientDataSet的连接属性,放一个按钮在单击事件中:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ClientDataSet.Execute;
      ShowMessage(ClientDataSet.Params.ParamByName('v2').AsString);
    end;
    弹出字符串book_nameEmail:[email protected]
      

  3.   

    可能是我没有说清楚,使搂主理解有误。
    使用DCOMConnection和SocketConnection只是代表使用了不同的连接协议,只要应用服务器是使用MIDAS技术,应用服务器都是用同一应用服务器接口实现的,即IAppServer.
    你可以通过在Delphi的View  ----> Type Library 打开应用服务器接口设定来定义服务器接口。在打开的窗口中你能发现一个以字母I 打头以你的应用服务器名命名的接口,右击该接口添加方法,在方法的Parameters中设置你要传递的参数, 注意参数的Modifier设定,[in]代表传入,[out]代表传出, [in,out]代表双向。根据你参数的传递情况进行设置即可。
    完成设定之后,你可在Servers_TLB中见到该接口的具体定义。
    在你应用服务器应用的远程数据模块单元中,已经有你服务器方法的定义了。你只需要实现你的参数传递即可。调用方法ClientDataSet中有AppServer。
      

  4.   


    學習先:
     謝謝hewei2003() (回答,為什麼我在測試的時候會提示我 無狀態的服務是不行的那
    我的環境是:  C++ Buider 6.0 SocketConnection ,SQL Server 2000
     
    謝謝 webstorm(mars) ( 你的方法我會去測試一下,不過可否有案例>請大家討論~
      

  5.   

    请问:webstorm(mars) 
    我使用的是 SocketConnection 的连接方式。我在服务器中写了一个涵数如:procedure TServer_Account.SetAccountCon(ZT_CODE: OleVariant;
      var ISCON: WordBool);
    begin
      if ZT_CODE = 'A' then 
        ISCON := Ture
      else ISCON := False ; 
    end;其中 ISCON 为out 输出参数到客户端中。
    然后在客户端中调用方法 SocketConnection 的 AppServer 。
    如:SocketConnection1.AppServer.SetAccountcon(t_str,t_bit) ;现在的问题是:
    1、如果中间层程序放在开发中间层的电脑上时,再运行程序,不会出错。
    2、如果把中间层放到另一台电脑上再运行时出错!
    提示为:Invalid Variant type conversion.
    (可能是没有注册相应的涵数)请问这样的问题如何处理?如何注册相应的涵数!(中间层程序运行没有问题!)
      

  6.   

    to hugo668(无与争锋)
    如果你的SetAccountcon 是在IAppServer接口中实现的方法的话,只要中间层服务器程序运行无问题的话,说明你的服务器端配置没有太大问题,但你需要保证客户端有相应的权限,能够下载IAppServer接口以调用你的方法,它是不需要注册的。
      

  7.   

    是你方法的Parameters的Modifier和数据类型设置不对,将需要传值的参数设置为[in,out]和指针类型,根据你的设置应为VARIANT *
      

  8.   

    to  longwycn(longser (微龙人)) 
    我也不知道为什么会产生你那个错误,“无状态”我的理解是没有属性的对象。
      

  9.   

    to hewei2003() :
      无状态并不是没有属性,它是不能为某个客户端保持特征值,使服务器可同时服务更多客户,也使系统的容错性能增强。