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;

  • 相关阅读:
    阿里云OSS进行文件下载时,报NOSuchKeys: com.aliyun.oss.OSSException: The specified key does not exist.
    [JAVA异常]ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 JDWP exit erro
    mybatis 中的<![CDATA[ ]]>
    HttpClients.custom的创建
    RestTemplate可以自定义重试次数
    RegxUtils正则表达式工具类
    MYSQL中 != 和 is not的区别
    ccna ccnp ccie 区别
    【IDEA】IDEA SpringBoot访问不到webapp下的内容
    日志 | logback | logback-spring.xml
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/5048341.html
Copyright © 2011-2022 走看看