zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    AIX 第3章 指令记录
    AIX 第2章 指令记录
    Oracle Exadata体系笔记
    决定undo表空间的大小
    摘录:官方文档对ROWID虚拟行的定义
    ORA-01102 cannot mount database in EXCLUSIVE mode
    居民身份证号码含义
    ORA-00257错误
    微机原理之 输入输出与中断
    操作系统总结之 输入输出系统(下)
  • 原文地址:https://www.cnblogs.com/Thenext/p/9780382.html
Copyright © 2011-2022 走看看