三层涉及代码很多,不好分析。
建议你使用DataSnap的引导方式,生成一个服务器端,再进行修改。是无问题的。

解决方案 »

  1.   

    我记得TADO在XE中是不能返回的吧。 必须是TSQLDataSet才可以返回。或者你返回Json或OleVairant自己解析
      

  2.   

    服务器端可以使用TADO读取,
    Windows客户端使用TClientDataSet
    Andord客户端使用JSON,MXL格式传递。
      

  3.   

    最好还是不要直接返回智能数据集,用TDBXReader返回,然后在客户端把TDBXReader转成TClientDataset服务端方法
    function TdssmServerMethods.GetDataR(const ASQLStr: string): TDBXReader;
    var
      aDBXCommand:TDBXCommand;
    begin
      if not sqlconMethods.Connected then
        sqlconMethods.Open;
        aDBXCommand:=sqlconMethods.DBXConnection.CreateCommand;
      try
        aDBXCommand.Text:=ASQLStr;
        aDBXCommand.CommandType:=TDBXCommandTypes.DbxSQL;  //'Dbx.SQL'
        Result:=aDBXCommand.ExecuteQuery;
      except
        //
      end;
    end;客户端:
    procedure TdmClientModule.GetDataFromReader(const ASQLStr: string; ADataSet: TClientDataSet);
    var
      ard:TDBXReader;
    begin
      if ADataSet.Active then
      begin
        ADataSet.Close;
        ADataSet.FieldDefs.Clear;
        ADataSet.Fields.Clear;
        ADataSet.IndexDefs.Clear;
      end;  try
        ard:=GetdssmServerMethodsClient.GetDataR(ASQLStr);
        TDBXClientDataSetReader.CopyReaderToClientDataSet(ard,ADataSet);
        ADataSet.Open;
        ard.Close;
      except
        //
      end;
    end;如果没有TClientDataset,那就用ToClientDataSet()直接返回一个TClientDataset
      

  4.   

    应该是其它原因,试下把
    function GetData(Value:String):TadoDataSet;
    换成
    function GetData(Value:String):TDataSet
    试试。