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;
firedac数据集和字符串相互转换的更多相关文章
- firedac数据集和字符串之间相互转换
firedac数据集和字符串之间相互转换 /// <author>cxg 2018-12-20</author> unit DatasetString; interface u ...
- 数据集和JSON相互转换
使用DELPHI原生类实现数据集和JSON相互转换 JSON二要素:数组和对象.对象可以包含数组,数组可以包含对象.无层数限制.OLEVARIANT也类似,OLEVARIANT的一个元素又可以是OL ...
- (转)JAVA的整型与字符串相互转换
JAVA的整型与字符串相互转换1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 ...
- 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换
[源码下载] 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换 作者:webabcd 介绍速战速决 之 PHP ...
- SQL列数据转换为字符串
行列转换,将列数据转换为字符串输出 ) SET @center_JZHW = ( SELECT DISTINCT STUFF( ( SELECT ',' + ce_code FROM ap_cente ...
- FIREDAC数据引擎
以前使用过BDE.ADO.DBX等数据引擎,后来发现它们都没有UNIDAC好用, 所以在很长的一段时间内中间件都使用UNIDAC作为数据引擎. 偶然的机会,使用了DELPHI XE5自带的FIREDA ...
- [TensorFlow 团队] TensorFlow 数据集和估算器介绍
发布人:TensorFlow 团队 原文链接:http://developers.googleblog.cn/2017/09/tensorflow.html TensorFlow 1.3 引入了两个重 ...
- c# winform Chart Pie 中若X轴数据为字符串时,#VALX取值为0
https://q.cnblogs.com/q/83848/ 在winform程序中用自带的Chart进行画图表时,若画饼图,其中X轴数据为字符串,这时候如果想设置Label值的格式为#VALX:#V ...
- SQL 行列转换数据转换为字符串
行列转换,将列数据转换为字符串输出 ) SET @center_JZHW = ( SELECT DISTINCT STUFF( ( SELECT ',' + ce_code FROM ap_cente ...
随机推荐
- native2ascii运用
1.native2ascii命令行的格式 native2ascii -[option] [inputfile [outputfile]] 说明: -[option]:表示命令开关,有两个选项可供选择: ...
- Java中JPS命令监控
很多人在学习java的时候只是对java粗略的学了一遍,很少有人能了解jvm层面的一些东西,比如我们想看目前有多少个java进程,可以在命令行执行jps.下面我们来说说jps的一些详细的用法. jps ...
- Expected one result (or null) to be returned by selectOne(), but found: 2 和 java.lang.UnsupportedOperationException异常
在学习MyBatis的时候,简简单单的MyBatis+MySql的增删改查操作,但是却出了问题. 刚开始数据库只有一条数据的时候,岁月静好,一切看起来都那么的OJBK.但是,当我往数据库插入第二条数据 ...
- Flask小总结+实例化Flask参数以及对app的配置
Flask 小而精 三方组件全 稳定性相对较差 1.启动: from flask import Flask app = Flask(__name__) app.run("0.0.0.0&qu ...
- 【洛谷2904/BZOJ1617】[USACO08MAR]跨河River Crossing(动态规划)
题目:洛谷2904 分析: 裸dp-- dp方程也不难想: \(dp[i]\)表示运\(i\)头牛需要的最短时间,\(sum[i]\)表示一次运\(i\)头牛(往返)所需的时间,则 \[dp[i]=m ...
- spring boot打包文件后,报错\No such file or directory
现象: 一段代码: ClassLoader loader = XXXUtil.class.getClassLoader(); String jsFileName = loader.getResourc ...
- Web开发中跨域的几种解决方案
同domain(或ip),同端口,同协议视为同一个域,一个域内的脚本仅仅具有本域内的权限,可以理解为本域脚本只能读写本域内的资源,而无法访问其它域的资源.这种安全限制称为同源策略. 出于安全考虑,HT ...
- redis集群——RPLR简笔(Redis+PostgreSQL+Linux(centos7)+RabbitMQ)
使用的是centos7. 1.下载最新redis源码,解压(2016-05-12最新版本为3.2.0,3.0及以上才有官方集群) 2.进入源码根目录(此目录下的redis-stable目录),找到ut ...
- 【PostgreSQL-9.6.3】事件触发器
当预定的事件发生时,事件触发器就会被触发.由于事件触发器设计的权限比较大,所以只有超级用户才能创建和修改触发器. 1. 事件触发器支持的事件分三类:ddl_command_start, ddl_com ...
- [Windows Server 2003] 安装PHP+MySQL方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:PHP+MyS ...