firedac数据集和字符串之间相互转换
2024-08-31 07:05:25
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.
最新文章
- Oracle Recovery 01 - 常规恢复之完全恢复
- ios 区域检测 使用coreLocation
- 在.sln文件中设置Visual Studio默认启动项目的简单方法
- qml json 解析到 ListView
- servlet &; filter &; listener &; interceptor
- [BC Round#26] Card 【各种水】
- WIN7下关闭驱动数字签名检查的方法
- NET版微信客户端.
- css块级元素居中
- 配置HTTPS服务
- 线程queue
- PowerEdge R430 机架式服务器安装( Ubuntu server 14.04.1 、PHP5.5.9、PHP-redis2.8、Phalcon3.1)
- Java开发笔记(十四)几种运算符的优先级顺序
- slot
- 配置nginx + keepalived 双主模式(双机互为主备)
- 采用ftpServer构建嵌入式ftp服务器时设置pass功能
- vscode快捷键的中文版
- urllib2 post请求方式,带cookie,添加请求头
- PAT 1049 数列的片段和(20)(代码+思路分析)
- Android Studio 新建drawable-hdpi、drawable-mdpi等
热门文章
- 【译】ASP.NET Identity Core 从零开始
- nodejs抓取别人家的页面的始末
- NFS基础配置
- java 重新抛出异常
- Java第三阶段学习(十四、JSP动态页面、EL表达式、JSTL标签库)
- oj提交时常见错误归纳
- 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
- 003.iSCSI客户端管理
- android Service oncreate 在UI线程 何时用service,何时用thread
- 模板 图的遍历 bfs+dfs 图的最短路径 Floyed+Dijkstra