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;

  • 相关阅读:
    Linux tcpdump命令详解
    移动开发网站收集
    Struts+2权威指南基于WebWork核心的MVC开发源码下载
    Eclipse+php插件+Xdebug搭建PHP完美开发/调试环境指南
    java相对目录和绝对目录解析
    python学习网站搜集
    window下开发iphone程序环境搭建iphone tool chain
    Windows下编译objectiveC
    java class路径获取
    完全优化MySQL数据库性能的八个方法
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/5048341.html
Copyright © 2011-2022 走看看