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