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;

最新文章

  1. SQLServer 2008 R2 对同时含有数字和中文的字段进行排序
  2. iOS 关于iphone6 和 iphone6 plus 的适配
  3. SQL Server遍历表的几种方法 转载
  4. LeetCode Lowest Common Ancestor of a Binary Tree
  5. (07)odoo扩展API
  6. VC ClistCtrl不同行背景色
  7. hihocoder#1054 : 滑动解锁(深度优先搜索)
  8. php使用NuSoap调用java/C# webservice乱码问题
  9. Bootstrap 响应式瀑布流 (使用wookmark)
  10. Dancing Stars on Me(判断正多边形)
  11. 重载(overload),覆盖/重写(override),隐藏(hide)
  12. 【改了一天的拓扑排序】POJ 1094——Sorting It All Out
  13. Python盗号原理-代码实现截屏键盘记录远程发送(不要做坏事)
  14. Nginx篇--Nginx源码搭建
  15. windows 查看端口占用,杀进程
  16. spring注解式参数校验
  17. Chapter5_初始化与清理_this关键字
  18. [Hive_5] Hive 的 JDBC 编程
  19. 关于jsp中jstl-core标签循环遍历的使用
  20. (网页)Angular.js 中 copy 赋值与 = 赋值 区别

热门文章

  1. [Swift通天遁地]七、数据与安全-(8)创建普通PDF文档和加密PDF文档
  2. redis-缓存穿透,缓存雪崩,缓存击穿,并发竞争
  3. Java初学者如何排查学习中遇到的问题
  4. Mac OS下配置 ADB环境变量
  5. BZOJ 1137 半平面交
  6. 记一次Oracle冷备恢复的过程
  7. V3的普通窗体控件的使用
  8. Raspberry Pi开发之旅-空气温湿度检测(DHT11)
  9. Angular——流程控制指令
  10. SQl基本操作——try catch