【问题标题】:delphi DataSnap 2010 Stream File working Sampledelphi DataSnap 2010 流文件工作示例
【发布时间】:2010-06-28 14:28:23
【问题描述】:

我正在尝试使用 DataSnap 将 XML 文件从服务器传输到客户端,在 ldsandon 的帮助下,我能够从 embarcadero 下载示例,但我的问题是我无法遵循它。

程序的伪程序应该以这种方式工作。

客户端将从服务器请求组合框中选定的 xml 文件。 服务器会将客户端选择的 xml 文件加载回客户端。

我只是想用 delphi DataSnap 解决这个问题,如果没有,我会使用 synapse 或 indy 来传输文件,但我发现 Datasnap 很有趣。

有人可以帮我吗,如果可能的话可以工作吗?

非常感谢。

请帮助我,我非常需要你的帮助.. 谢谢,谢谢

我找到了这个link,但我不知道如何将其转换为 TFileStream

【问题讨论】:

  • 如果你还在,请回来接受我的回答。谢谢

标签: delphi delphi-2010 datasnap


【解决方案1】:

//服务器端

function TServerMethods1.GetCDSXML(SQL: String; var FileSize: Integer): TStream;
begin

  QryMisc.Close;
  QryMisc.SQL.Text := SQL;
  CDSMisc.Open;
  Result := TMemoryStream.Create;
  try
    CDSMisc.SaveToStream(Result, dfXML);
    FileSize := Result.Size; // not CDSMisc.DataSize;
    Result.Position := 0; // Seek not implemented in abstract class
  finally
    CDSMisc.Close;
  end;

end;

//客户端

procedure TClientModule1.PopMiscCDS(SQL: String);
const
   BufSize = $8000;
var
   RetStream: TStream;
   Buffer: PByte;
   MemStream: TMemoryStream;
   BytesRead: Integer;
   FileSize: Integer;
begin
   try
     MemStream := TMemoryStream.Create;
     GetMem(Buffer, BufSize);
     try
       //---------------------------------------------------------
       RetStream := ServerMethods1Client.GetCDSXML(SQL, FileSize);
       //---------------------------------------------------------
       repeat
         BytesRead := RetStream.Read(Pointer(Buffer)^, BufSize);
         if BytesRead > 0 then
           MemStream.WriteBuffer(Pointer(Buffer)^, BytesRead);
       until BytesRead < BufSize;

       if FileSize <> MemStream.Size then
         raise Exception.Create('Error downloading xml');

       MemStream.Seek(0, TSeekOrigin.soBeginning);
       CDSMisc.Close;
       CDSMisc.LoadFromStream(MemStream);

     finally
       FreeMem(Buffer, BufSize);
       MemStream.Free;
     end;

   except
     on E: Exception do
     begin
        ShowMessage(E.Message);
     end;
   end;

end;

【讨论】:

  • 现在提供完整且经过测试的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
相关资源
最近更新 更多