我正在尝试使用DataSnap将XML文件从服务器端流式传输到客户端,在ldsandon的帮助下,我能够从embarcadero下载示例,但我的问题是我无法理解它。
程序的伪代码应该是这样工作的。
客户端将向服务器请求组合框中选定的xml文件。服务器会将客户端选择的xml文件加载回客户端。
我只是在尝试使用DataSnap来解决这个问题,如果不是这样,我会使用synapse或者Datasnap来传输文件,但是我发现Datasnap很有趣。
如果可能的话,有没有人能帮我个忙?
非常感谢。
请帮帮我,我非常需要你的帮助。谢谢,谢谢
我找到了这个link,但我不知道如何将它转换为TFileStream
发布于 2016-02-04 21:21:46
//服务端
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;https://stackoverflow.com/questions/3133226
复制相似问题