zoukankan      html  css  js  c++  java
  • firedac数据集和字符串相互转换

    uses Data.FireDACJSONReflect

    1)FIREDAC数据库序列为字符串,进行了加压和BASE64编码

    function DataSetToString(const ADataSet: TFDAdaptedDataSet): string;
    var
    LBinary64: string;
    LMemoryStream: TMemoryStream;
    LStringStream: TStringStream;
    LDstStream: TMemoryStream;
    Zipper: TZCompressionStream;
    begin
    LDstStream := TMemoryStream.Create;
    try
    LMemoryStream := TMemoryStream.Create;
    try
    ADataSet.SaveToStream(LMemoryStream, TFDStorageFormat.sfBinary);
    LMemoryStream.Seek(0, TSeekOrigin.soBeginning);
    Zipper := TZCompressionStream.Create(clDefault, LDstStream);
    try
    Zipper.CopyFrom(LMemoryStream, LMemoryStream.Size);
    finally
    Zipper.Free;
    end;
    finally
    LMemoryStream.Free;
    end;
    LDstStream.Seek(0, TSeekOrigin.soBeginning);

    LStringStream := TStringStream.Create;
    try
    TNetEncoding.Base64.Encode(LDstStream, LStringStream);
    LBinary64 := LStringStream.DataString;
    finally
    LStringStream.Free;
    end;
    finally
    LDstStream.Free;
    end;
    Result := LBinary64;
    end;

    2)从字符串还原出来FDMEMTABLE,进行了解压和BASE64解码

    function MemTableFromString(const AValue: string): TFDMemTable;
    var
    LMemTable: TFDMemTable;
    LStringStream: TStringStream;
    LMemoryStream: TMemoryStream;
    LOrgStream: TMemoryStream;
    Unzipper: TZDecompressionStream;
    begin
    LMemTable := TFDMemTable.Create(nil);
    LMemoryStream := TMemoryStream.Create;
    try
    LStringStream := TStringStream.Create(AValue);
    try
    LOrgStream := TMemoryStream.Create;
    try
    TNetEncoding.Base64.Decode(LStringStream,LOrgStream);
    LOrgStream.Seek(0, TSeekOrigin.soBeginning);
    Unzipper := TZDecompressionStream.Create(LOrgStream);
    try
    LMemoryStream.CopyFrom(Unzipper, Unzipper.Size);
    finally
    Unzipper.Free;
    end;
    LMemoryStream.Seek(Longint(0), soFromBeginning);
    finally
    LOrgStream.Free;
    end;
    finally
    LStringStream.Free;
    end;
    LMemTable.LoadFromStream(LMemoryStream, TFDStorageFormat.sfBinary);
    finally
    LMemoryStream.Free;
    end;
    Result := LMemTable;
    end;

  • 相关阅读:
    力扣 503 :下一个更大元素 II
    力扣 684 :冗余连接
    时间空间复杂度
    并查集
    UE4解决贴花拉伸的简单办法
    《程序员修炼之道Ⅱ》读书简记
    mac中安装支持m1的软件,提示已损坏问题解决
    在idea中构建gradle项目报错Command line is too long
    向上向下取整
    web端开发工具下载地址
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/5048341.html
Copyright © 2011-2022 走看看