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.

  

最新文章

  1. Oracle Recovery 01 - 常规恢复之完全恢复
  2. ios 区域检测 使用coreLocation
  3. 在.sln文件中设置Visual Studio默认启动项目的简单方法
  4. qml json 解析到 ListView
  5. servlet &amp; filter &amp; listener &amp; interceptor
  6. [BC Round#26] Card 【各种水】
  7. WIN7下关闭驱动数字签名检查的方法
  8. NET版微信客户端.
  9. css块级元素居中
  10. 配置HTTPS服务
  11. 线程queue
  12. PowerEdge R430 机架式服务器安装( Ubuntu server 14.04.1 、PHP5.5.9、PHP-redis2.8、Phalcon3.1)
  13. Java开发笔记(十四)几种运算符的优先级顺序
  14. slot
  15. 配置nginx + keepalived 双主模式(双机互为主备)
  16. 采用ftpServer构建嵌入式ftp服务器时设置pass功能
  17. vscode快捷键的中文版
  18. urllib2 post请求方式,带cookie,添加请求头
  19. PAT 1049 数列的片段和(20)(代码+思路分析)
  20. Android Studio 新建drawable-hdpi、drawable-mdpi等

热门文章

  1. 【译】ASP.NET Identity Core 从零开始
  2. nodejs抓取别人家的页面的始末
  3. NFS基础配置
  4. java 重新抛出异常
  5. Java第三阶段学习(十四、JSP动态页面、EL表达式、JSTL标签库)
  6. oj提交时常见错误归纳
  7. The web application [ ] registered the JDBC driver [net.sourceforge.jtds.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver
  8. 003.iSCSI客户端管理
  9. android Service oncreate 在UI线程 何时用service,何时用thread
  10. 模板 图的遍历 bfs+dfs 图的最短路径 Floyed+Dijkstra