首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi XE6中使用Datasnap的流XE6

Delphi XE6中使用Datasnap的流XE6
EN

Stack Overflow用户
提问于 2016-05-26 01:37:25
回答 1查看 508关注 0票数 2

我试图使用Delphi中的Datasnap来流TClientDataSet。但是,我一直在客户端代码上得到“丢失的数据提供程序或数据包”错误。

//客户

代码语言:javascript
复制
procedure TForm2.Button1Click(Sender: TObject);
var
 CDS: TClientDataSet;
 S: TStream;
begin
  CDS := TClientDataSet.Create(nil);
  try
    S:= ClientModule1.ServerMethods1Client.getCDSData;
    S.Seek(0,soFromBeginning);
    S.Position:= 0;
    CDS.LoadFromStream(S);
    CDS.Open; // Missing Data Provider or Data Packet
  finally
    CDS.Free;
  end;
end;

//服务器

代码语言:javascript
复制
function TServerMethods1.getCDSData: TStream;
var
  Writer: TBinaryWriter;
  CDS: TClientDataSet;
  I: Integer;
begin
  result := TMemoryStream.Create;
  CDS := TClientDataSet.Create(nil);
  with CDS.FieldDefs do
  begin
    Clear;
    Add('First', ftString, 20);
    Add('Last', ftString, 25);
  end;
  CDS.CreateDataSet;
  CDS.Open;
  CDS.AppendRecord(['John', 'Smith']);
  CDS.AppendRecord(['Jane', 'Doe']);
  try
    CDS.SaveToStream(result);
  finally
    CDS.Free;
  end;
end;

我还尝试将其作为XML而不是二进制流流。

代码语言:javascript
复制
  CDS.SaveToStream(result, dfXML);

得到同样的错误

“丢失数据提供程序或数据包”

答:

代码语言:javascript
复制
CDS.SaveToStream(result);
Result.Position := 0; //need this in server method "getCDSData"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-08 13:21:26

代码语言:javascript
复制
CDS.SaveToStream(result);
Result.Position := 0; 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37450199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档