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 = -1 then begin SetLength(LBuffer, LBufSize); repeat LReadLen := AStream.Read(LBuffer[0], LBufSize); if LReadLen > 0 then Result.WriteBuffer(LBuffer[0], LReadLen); if LReadLen < LBufSize then break; until LReadLen < LBufSize; end else Result.CopyFrom(AStream, 0); Result.Position := 0; except Result.Free; end; end; procedure TForm1.btnQry3Click(Sender: TObject); var LStream: TStream; LMemStream: TMemoryStream; begin DataSource1.DataSet := FDMemTable1; LStream := methods.QuerySql3('0', 'select * from t1'); if LStream <> nil then begin LMemStream := CopyStream(LStream); FDMemTable1.LoadFromStream(LMemStream, TFDStorageFormat.sfBinary); LMemStream.Free; end; end;

 

转载于:https://www.cnblogs.com/Thenext/p/9780382.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值