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

    firedac数据集和字符串之间相互转换

    /// <author>cxg 2018-12-20</author>
    
    unit DatasetString;
    
    interface
    
    uses
      System.NetEncoding, FireDAC.Stan.Intf, System.ZLib, System.Classes, FireDAC.Comp.Client,
      System.SysUtils;
    
    function DataSetToString(const ADataSet: TFDAdaptedDataSet): string;
    
    function MemTableFromString(const AValue: string): TFDMemTable;
    
    implementation
    
    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;
    
    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(0, TSeekOrigin.soBeginning);
          finally
            LOrgStream.Free;
          end;
        finally
          LStringStream.Free;
        end;
        LMemTable.LoadFromStream(LMemoryStream, TFDStorageFormat.sfBinary);
      finally
        LMemoryStream.Free;
      end;
      Result := LMemTable;
    end;
    
    end.
    

      

  • 相关阅读:
    ubuntu安装gradle
    ubuntu文件查找
    接口服务flask的负载均衡部署
    区块链节点网络的nginx转发部署
    typescript检查包之间是否有循环依赖
    shiro对事务的影响
    防止xss(脚本攻击)的方法之过滤器
    Mysql批量更新速度慢的解决方案
    springBoot的三种启动方式
    mybatis的注解开发之三种动态sql
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/10148240.html
Copyright © 2011-2022 走看看