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;

  • 相关阅读:
    Java内存管理以及各个内存区域详解
    python数据的存储和持久化操作
    Redis的安装及配置
    POI使用详解
    遍历Map的几种方法
    Quartz的cronTrigger表达式
    Java对XML文档的增删改查
    Solr系列二:Solr与mmseg4j的整合
    cms STW 的两个阶段
    GROUP BY 和 ORDER BY 同时使用问题
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/5048341.html
Copyright © 2011-2022 走看看