Delphi Datasnap使用tcp / ip将ClientDataSet发送到服务器

时间:2015-09-30 04:54:13

标签: delphi delphi-xe6 datasnap tclientdataset

我有一个简单的基于DataSnap TCP / IP的客户端服务器应用程序。我建立 客户端应用程序上的ClientDataSet并填充了一些数据。现在我如何将ClientDataSet记录发送到Server,以便我可以处理它并最终将一些数据保存到服务器。

被修改

所以我尝试了以下代码,但问题是在服务器上我的记录少于我从客户端发送的记录

客户代码

var
 cd: TClientDataSet;
begin
  cd:= TClientDataSet.Create(self);
  cd.Data := cdsCustomer.Data;
Memo1.Lines.Add(IntTostr( cd.RecordCount )) ;
 ServerMethods1Client.TestDataSet( CD);

服务器代码

function TServerMethods1.TestDataSet(ds: tdataset): string; 
begin     
  try
    DataSetProviderCommon.DataSet := ds;
    if not DataSetProviderCommon.DataSet.eof then
     TempClientDataSet.Open;

    if  TempClientDataSet.RecordCount >0 then      
       Form1.Memo1.Lines.Add( IntTostr( TempClientDataSet.RecordCount) )       
    else
        Form1.Memo1.Lines.Add( ' Not records found' ) ;

    DataSetProviderCommon.DataSet.Close;   
  except on e: Exception do
    Form1.Memo1.Lines.Add('TestDataSet error :' + e.Message )   ;   
  end;
end;   

1 个答案:

答案 0 :(得分:1)

您可以简单地将Data属性作为OleVariant类型传递给服务器(同样,您可以使用OleVariant结果类型或var / out参数将数据从服务器传回客户端):

客户代码

begin
  Memo1.Lines.Add( IntTostr( cdsCustomer.RecordCount ) );
  ServerMethods1Client.TestDataSet( cdsCustomer.Data );
end;

服务器代码

function TServerMethods1.TestDataSet(ds: OleVariant): string; 
begin     
  try
    TempClientDataSet.Data := ds;

    if TempClientDataSet.RecordCount > 0 then      
      Form1.Memo1.Lines.Add( IntTostr( TempClientDataSet.RecordCount ) )       
    else
      Form1.Memo1.Lines.Add( 'No records found' ) ;

    TempClientDataSet.Close;   
  except on e: Exception do
    Form1.Memo1.Lines.Add( 'TestDataSet error: ' + e.Message );   
  end;
end;