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.
    

      

  • 相关阅读:
    layui弹出层处理(获取、操作弹出层数据等)
    Unity3D判断鼠标向右或向左滑动,响应不同的事件
    (转载)李剑英的CSLight入门指南结合NGUI热更新
    Unity3D研究院之LZMA压缩文件与解压文件
    CSLight研究院之学习笔记结合NGUI(一)
    《暗黑世界GM管理后台系统》部署+功能说明文档
    Firefly卡牌手游《暗黑世界V1.5》服务器端源码+GM管理后台源码
    电信SDK Pay函数里面System.out.print 无输出消息
    WP8:在Unity中使用OpenXLive
    WP8:Unity3D之间的值传递
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/10148240.html
Copyright © 2011-2022 走看看