我有一个简单的基于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;
答案 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;