有一ADOQuery执行Open动作后会获取一个返回数据集我想做的:
   在不涉及使用TDataSetProvider控件的基础上将ADOQuery中的数据集封装成一个OleVariant(经传输后此数据能直接赋给TClientDataSet使用)为什么有如此要求:
   原来编写一个程序,采用三层结构,在局域网或VPN上应用没问题,现需通过外部广域网进行数据访问(动态IP,仅开了一个端口),但在中间层跟踪发现任何涉及TDataSetProvider的TClientDataset, TADOQuery等组件都无法Open(如将DataSetProvider.DataSet属性设为ADOQuery,则此ADOQuery将无法执行Open动作),将属性去除后就可以。疑问:是否DataSetProvider指向的查询组件会再开一个端口供查询用?

解决方案 »

  1.   

    试过了,当断开TDataSetProvider.DataSet时 ADOQuery单独使用可以如:
          tmpdsp.DataSet := nil;  //此行无作用   如果在设计时设计了tmpdsp.DataSet = Q_tmp 即使赋了空值,以下的Q_tmp依然不可以Open
     
          Q_tmp.SQL.Clear;
          Q_tmp.SQL.Add(GetSQL(Params));  //生成SQL语句
          Q_tmp.Open;   //能打开并返回结果      tmpdsp.DataSet := Q_tmp;  //执行此行的问题就来了   Q_tmp会自动Close 且tmpdsp.Data中无数据
         ......如何才能返回将Q_tmp查出的数据返回形如tmpdsp.Data数据 ???
      

  2.   

    function GetData(): OleVariant;
    begin
      tmpdsp.DataSet = Q_tmp
      Q_tmp.SQL.Clear;
      Q_tmp.SQL.Add(GetSQL(Params));
      //在此Q_tmp无需Open; dsp的data属性会帮你执行SQL并返回数据.
      Result := tmpdsp.data;
    end;
      

  3.   

    TDataProvider是中间件吗?哈哈...........
      

  4.   

    将一个数据集数据转到客户数据集嘛,自己做个小过程就搞定,此后从APP接口走调用
      

  5.   

    感谢楼上各位的支技现在我只想买块豆腐--------------把自己砸死算了已经搞定了,忘了TDataSetProvider需要Midas.DLL的支持  唉 汗颜!!!