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;

  • 相关阅读:
    非线性数据结构——树
    排序算法之插入排序
    web框架之environment处理
    web开发之http和wsgi
    python os模块和shutil模块
    python路径操作
    stringIO和bytesIO
    python文件操作
    设计模式
    设计模式
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/7770471.html
Copyright © 2011-2022 走看看