中间层这样有四个控件:TADOConnection,TADODataSet,TADOStoreProc,TDataSetPrivoder,我在中间层上定义属性,方法,其中有两个方法,一个是GetCount,用TADODataSet取得表的记录数,另一个是ExeProc,用TADOStordProc执行存储过程,这两个方法在客户端用TDCOMConnection的AppServer调用,都可以调用成功,所以我觉得做三层系统时中间层只需要一个TDataSetPrivoder就行了,因为我的TADOStoreProc与TDataSetPrivoder控件在中间层定义接口时根本没有联系上,那么我现在又要定义一个GetRecord的方法,那么要如何才能让客户端可以取到返回的记录集呢?
如下代码,请指点:
function GetRecord:OleVariant;
begin
  adoDataSet.commandText := 'Select Top 10 * From DataList';
  adoDataSet.Open;
  Result := //这里要如何写才能让客户端的TClientDataSet.Data得到值?
            //因为我要在客户端用TDCOMConnect.AppServer.GetRecord来调用
end;

解决方案 »

  1.   

    看来没有人能解决?
    我咋觉得大家好像都没有用MIDAS写三层系统一样,还是CSDN现在没有高手了?或者要写就一定是客户端的TClientDataSet传SQL语句返回的记录集!这个似乎有违OOP的概念啊!
      

  2.   

    把:TClientDataSet.Data定义为一个变体类型就可以了。
      

  3.   

    服务器端:result:=DataSetPrivoder1.data;
    客户端:ClientDataSet1.Data:=Appserver.getrecorder;
      

  4.   

    soaringsouth(栈桥捉鳖) 有时间 没看到你了搂住他说的没错 你自定义的接口 返回数据要自己接收
      

  5.   

    function TTestForEver.GetData: OleVariant;
    var
    iOut:integer;
    begin
      with adoquery1 do
      begin
        sql.Clear;
        sql.Add('select * from authors');
        open;
        DataSetProvider1.DataSet :=adoquery1;
        Result:=DataSetProvider1.GetRecords(-1,iOut,MetaDataOption);
      end;
    end
      

  6.   

    Client:
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    cds.Data :=DCOMConnection1.AppServer.GetData;
    end;
      

  7.   

    http://www.delphibbs.com/delphibbs/dispq.asp?lid=1099676
    txmaster的Getdatas方法.
      

  8.   

    frogshero(三波萝)的回答可能是最有帮助的吧!我设了20分有点少,我想再加10分给大家结贴(虽然30分不多,但总算是能说明还有一点诚意吧),但我不知道在哪里加分,上面的各位谁告诉我一下好结贴啊!谢谢大家啊!