delphi DataSnap 2010流文件工作示例
我正在尝试使用DataSnap将XML文件从服务器传输到客户端,在ldsandon的帮助下,我能够从embarcadero下载示例,但我的问题是我无法理解它 程序的伪代码应该以这种方式工作 客户端将从服务器请求组合框中选定的xml文件。 服务器将把客户机选择的xml文件加载回客户机 我只是想用delphi DataSnap解决这个问题,如果不是的话,我会用synapse或indy来传输文件,但我发现DataSnap很有趣 如果可能的话,有人能帮我一个忙吗 非常感谢 请帮帮我,我非常需要你的帮助。。谢谢,谢谢 我找到了这个,但我不知道如何将其转换为TFileStream//服务器端delphi DataSnap 2010流文件工作示例,delphi,delphi-2010,datasnap,Delphi,Delphi 2010,Datasnap,我正在尝试使用DataSnap将XML文件从服务器传输到客户端,在ldsandon的帮助下,我能够从embarcadero下载示例,但我的问题是我无法理解它 程序的伪代码应该以这种方式工作 客户端将从服务器请求组合框中选定的xml文件。 服务器将把客户机选择的xml文件加载回客户机 我只是想用delphi DataSnap解决这个问题,如果不是的话,我会用synapse或indy来传输文件,但我发现DataSnap很有趣 如果可能的话,有人能帮我一个忙吗 非常感谢 请帮帮我,我非常需要你的帮助。
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(指针(缓冲区)^,字节读取);
直到字节读取
现在提供了一个完整且经过测试的解决方案。如果您仍然在那里,请回来接受我的回答。谢谢