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;

  • 相关阅读:
    STOAdiary20110315完成的任务
    java MD5 密码加密例子
    STOAdiary20110316完成的任务
    个人实习总结
    STOAdiary20110317完成的任务
    Android 操作XML的几种方式
    Ubuntu 桌面图标不见,鼠标右键的问题
    20110329日记
    MySql 中文问题的处理
    20110312wmh日记
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/5048341.html
Copyright © 2011-2022 走看看