DATASNAP远程方法返回TSTREAM正解(转咏南兄)


DATASNAP远程方法返回TSTREAM正解


DATASNAP远程方法返回TSTREAM,如果数据大小超过32K是会报错的。许多DELPHIER栽在这个上头,甚至开始怀疑TSTREAM返回数据的可行性。


因为DATASNAP远程方法返回TSTREAM,数据包大小有最大32K限制。


怎么解决?客户端要做并包处理。


function CopyStream(const AStream: TStream): TMemoryStream;
const
LBufSize = $F000;
var
LBuffer: TBytes;
LReadLen: Integer;
begin
Result := nil;
if AStream = nil then
Exit;
Result := TMemoryStream.Create;
try
if AStream.Size = - then
begin
SetLength(LBuffer, LBufSize);
repeat
LReadLen := AStream.Read(LBuffer[], LBufSize);
if LReadLen > then
Result.WriteBuffer(LBuffer[], LReadLen);
if LReadLen < LBufSize then
break;
until LReadLen < LBufSize;
end
else
Result.CopyFrom(AStream, );
Result.Position := ;
except
Result.Free;
end;
end; procedure TForm1.btnQry3Click(Sender: TObject);
var
LStream: TStream;
LMemStream: TMemoryStream;
begin
DataSource1.DataSet := FDMemTable1;
LStream := methods.QuerySql3('', 'select * from t1');
if LStream <> nil then
begin
LMemStream := CopyStream(LStream);
FDMemTable1.LoadFromStream(LMemStream, TFDStorageFormat.sfBinary);
LMemStream.Free;
end;
end;
上一篇:Elasticsearch.js 发布 —— 在Node.js和浏览器中调用Elasticsearch


下一篇:【NodeJS】Node.JS 开发环境安装