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;

  • 相关阅读:
    hdu 5116 计数
    hdu 5117 数学公式展开 + dp
    hdu 5115 Dire Wolf 区间dp
    I00025 寻找循环数
    外部设备发展趋势
    外部设备发展趋势
    互联网
    互联网
    I00024 出钱买羽
    I00024 出钱买羽
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/7770471.html
Copyright © 2011-2022 走看看