出现 "Missing Data Provider or Data Packet" 错误 - 在客户端数据集中将数据交换为流

Getting "Missing Data Provider or Data Packet" error - Exhange data as stream within clientdataset

我正在使用 datasnap 技术,其中我有一个客户端服务器应用程序。 服务器从数据库中获取数据并将其放入流中,然后在客户端获取。 我在客户端代码中不断收到 "Missing Data Provider or Data Packet" 错误。

服务器端代码:

function GetFiles(ClientID: integer): TStream;
var
  CDS: TClientDataSet;
begin
  try
  Result := TMemoryStream.Create;
  CDS := TClientDataSet.Create(nil);
  with adsFiles do   // ads is adodataset and dspFiles is the dataset provider which has its dataset property set to adsFiles
  begin
    Close;
    Parameters.ParamByName('ClientID').Value := ClientID;
    Open;
    CDS.Data :=  dspFiles.Data;
    CDS.Open; 
    CDS.SaveToStream(Result);
    Result.Position := 0;
  end;
  finally
    CDS.Free;
  end;

客户端代码:

procedure ExportData;
var
   StreamData: TStream;
begin
    StreamData := SvrMethodClass.GetFiles(AClientID);
    StreamData.Seek(0,soFromBeginning);
    StreamData.Position:= 0;
    cdsClientFiles.LoadFromStream(StreamData); // getting the error message "Missing Data Provider or Data Packet" 
    cdsClientFiles.Open;
end;

客户端我已经删除了一个 clientdataset 组件并尝试将数据加载到这个出现问题的数据集中任何帮助指出我哪里出错了将不胜感激。谢谢

类似问题: 检查了解决方案,但没有成功

我花了很多时间调查 return 将数据作为来自数据快照服务器的流的问题 - 参见例如,但无法为流数据提出令人满意的解决方案。

但是实验表明,字符串数据不会出现类似的问题(我测试了几百兆的字符串)。因此,我建议您尝试从 Datasnap 服务器发送您的 binary/blob 数据作为 Base64 编码的字符串。

当然,如果您的 ADO 或 CDS 数据的字符串表示足以满足您的需求,实现该目的的一种方法是在服务器方法中执行 adsFile.SaveToFile(..., pfXML)CDS.SaveToFile(... dfXML) ,然后 return 作为字符串的结果文件。