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.
    

      

  • 相关阅读:
    【BZOJ 1069】【SCOI 2007】最大土地面积 凸包+旋转卡壳
    【POJ 2187】Beauty Contest 凸包+旋转卡壳
    1056: [HAOI2008]排名系统
    1874: [BeiJing2009 WinterCamp]取石子游戏
    1055: [HAOI2008]玩具取名
    2338: [HNOI2011]数矩形
    1060: [ZJOI2007]时态同步
    1054: [HAOI2008]移动玩具
    1053: [HAOI2007]反素数ant
    1052: [HAOI2007]覆盖问题
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/10148240.html
Copyright © 2011-2022 走看看