1、我首先创建了一个新的工程项目(应用程序服务器)。创建了一个Remote Data Module,名字为RDMapp,在它上面放了三个组件,TADOConnection、TADOQuery、TdataSetProvider。设置TADOConnection的ConnectionString属性连接SQL server2000。设置TADOQuery的Parameters的Name为emp_no,为ftstring型的,它的sql.strings='select * from gg_zybm where emp_no=:emp_no',TdataSetProvider的Dataset为TADOQuery。这个项目名为:wh_p.dpr。
2、创建客户端应用程序。也放置了三个组件,分别为DCOMConnection1、ClientDataSet1、DataSource1,一个文本框,一个查询按钮,一个DBGrid1。分别设置如下:DCOMConnection1的ServerName为 wh_p.RDMapp。ClientDataSet1的Params为'emp_no',ProviderName='DataSetProvider1',RemoteServer=DCOMConnection1。DBGrid1的DataSource为DataSource1。
查询按钮为事件为:
 begin
   ClientDataSet1.Close;
   ClientDataSet1.Params.ParamValues['emp_no']:=edit1.text;
   ClientDataSet1.Open;
 end;
运行之后总是出现:DAX Error这个错误,错误名为Stack overflow。点击确定之后出现'不支持此接口'这个错误!我这个表中的记录一共不足十条,怎么能出现堆栈益这个错误呢?在我的系统目录下也有midas.dll啊!恳请有过三层结构经验的朋友帮检查一下我的这个步骤究竟有什么错呢?谢谢你们了!

解决方案 »

  1.   

    ClientDataSet1.Params.ParamByName('emp_no').AsString:=edit1.text;
    试试,不行再说。
      

  2.   

    这是客户端查询代码:查询按钮为事件为:
     begin
       ClientDataSet1.Close;
       ClientDataSet1.Data:=ClientDataSet1.DataRequest('select * from tab_Name where emp_no='+#39+edit1.text+#39);
       ClientDataSet1.Open;
     end;服务端:function TContractServer.DataSetProvider1DataRequest(Sender: TObject;
      Input: OleVariant): OleVariant;
    begin
        with ADOQuery1 do
        begin
            Close;
            sql.Clear;
            sql.Add(input);
            open;
        end;
        result:=DataSetProvider1.Data;
    end;完毕.
      

  3.   

    to xiaoyan21(明月心):谢谢你!
    还是出现堆栈益出和不支持此接口的错误!
      

  4.   

    Provider的接口,我觉的不如用IAppServer的好一些;
      

  5.   

    既然用ADO,那么在创建ROMATE DATA MODULE的时候,TREADING MODEL不应该选择默认值!
      

  6.   

    在服务端定义一个方法,接受客户端的查询参数.在服务端对ADOQUERY的PARAMETERS参数赋值为此参数.然后把结果集返回客户端.
    APPLICATION SERVER:   procedure RDMappThgbTest.ClientQuery(const ClientValue: WideString);
    begin
      ADOQuery1.Close;
      ADOQuery1.Parameters[i]:=ClientValue;
      ADOQuery1.Open;
    end;Client:
      ClientDataSet1.Appserver.ClientQuery(Edit1.Text)
    你可以自己加一些异常保护.客户端的调用也可以使用更为有效的早调用(使用接口).有什么问题可以再讨论.
      

  7.   

    建议使用ADO原形。动态创建数据库连接和数据集。
    另。ADO控件在COM中的速度优势不明显