Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
delphi DataSnap 2010流文件工作示例_Delphi_Delphi 2010_Datasnap - Fatal编程技术网

delphi DataSnap 2010流文件工作示例

delphi DataSnap 2010流文件工作示例,delphi,delphi-2010,datasnap,Delphi,Delphi 2010,Datasnap,我正在尝试使用DataSnap将XML文件从服务器传输到客户端,在ldsandon的帮助下,我能够从embarcadero下载示例,但我的问题是我无法理解它 程序的伪代码应该以这种方式工作 客户端将从服务器请求组合框中选定的xml文件。 服务器将把客户机选择的xml文件加载回客户机 我只是想用delphi DataSnap解决这个问题,如果不是的话,我会用synapse或indy来传输文件,但我发现DataSnap很有趣 如果可能的话,有人能帮我一个忙吗 非常感谢 请帮帮我,我非常需要你的帮助。

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

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

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

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

如果可能的话,有人能帮我一个忙吗

非常感谢

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

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

//服务器端

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;
过程TClientModule1.popmicds(SQL:String);
常数
BufSize=8000美元;
变量
RetStream:TStream;
缓冲液:PByte;
MemStream:TMemoryStream;
字节读取:整数;
文件大小:整数;
开始
尝试
MemStream:=TMemoryStream.Create;
GetMem(缓冲区,BufSize);
尝试
//---------------------------------------------------------
RetStream:=ServerMethods1Client.GetCDSXML(SQL,文件大小);
//---------------------------------------------------------
重复
BytesRead:=RetStream.Read(指针(缓冲区)^,BufSize);
如果字节读取>0,则
MemStream.WriteBuffer(指针(缓冲区)^,字节读取);
直到字节读取
现在提供了一个完整且经过测试的解决方案。如果您仍然在那里,请回来接受我的回答。谢谢