最好还是不要直接返回智能数据集,用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
应该是其它原因,试下把 function GetData(Value:String):TadoDataSet; 换成 function GetData(Value:String):TDataSet 试试。
Windows客户端使用TClientDataSet
Andord客户端使用JSON,MXL格式传递。
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
function GetData(Value:String):TadoDataSet;
换成
function GetData(Value:String):TDataSet
试试。