firedac数据集和字符串之间相互转换
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.
firedac数据集和字符串之间相互转换的更多相关文章
- firedac数据集和字符串相互转换
uses Data.FireDACJSONReflect 1)FIREDAC数据库序列为字符串,进行了加压和BASE64编码 function DataSetToString(const ADataS ...
- JavaScript - 问题集 - 含function的json对象与json字符串之间相互转换
基本的转换为:JSON.parse与JSON.stringify. 但是json数据中含function,则转换后,function会丢失,如: var json={ test:'test', log ...
- mysql时间与字符串之间相互转换
1.时间转字符串 DATE_FORMAT(日期,格式字符串) SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); 2.字符串转时间 STR_TO_DATE( ...
- 在iOS开发中,我们会遇到十六进制和字符串之间相互转换,话不多说,直接上代码:
//将十六进制的字符串转换成NSString则可使用如下方式: + (NSString *)convertHexStrToString:(NSString *)str { if (!str || [s ...
- mysql 时间,时间戳,字符串之间相互转换
时间转字符串 date_format(now(),'%Y-%m-%d') 时间转时间戳 unix_timestamp(now()) 字符串转时间 str_to_date('2020-01-19','% ...
- 数据集和JSON相互转换
使用DELPHI原生类实现数据集和JSON相互转换 JSON二要素:数组和对象.对象可以包含数组,数组可以包含对象.无层数限制.OLEVARIANT也类似,OLEVARIANT的一个元素又可以是OL ...
- 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换
[源码下载] 速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换 作者:webabcd 介绍速战速决 之 PHP ...
- Python中字符串与字节之间相互转换
Python中字符串与字节之间相互转换 a = b"Hello, world!" # bytes object b = "Hello, world!" # ...
- VC++中多字节字符集和Unicode之间的互换
在Visual C++.NET中,默认的字符集是Unicode,这和Windows默认的字符集是一致的,不过在老的VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte C ...
随机推荐
- 修改MySQL的时区,涉及参数time_zone
原地址:http://blog.csdn.net/mchdba/article/details/9763521 首先需要查看mysql的当前时区,用time_zone参数 mysql> show ...
- input onchange事件
//输入帐号,默认赋值给员工电话和后台登录帐号$('#mobile_phone_').bind('input propertychange', function() { var phone = $(' ...
- IDEA中Ctrl+Shift+F快捷键无效的解决方式
某天突然发现idea非常重要的快捷键ctrl+shift+F无效了,网上搜了很多都说是qq快捷键冲突,但是找了下qq快捷键却没有解决,现在给大家一个解决快捷键冲突的思路: 1.查看QQ快捷键--> ...
- 数学之美——HMM模型(一)介绍
一直想写点关于数学方面的blog,这对于数据挖掘分析,NLP处理等都有着比较重要的作用,之前在CSDN上想写点HMM方面的文章,一直没写成,最近几天终于抽点时间完成了HMM的文章,加以整理,遂有这个系 ...
- Linux 配置mail发送邮件
一.在/etc/mail.rc下添加如下内容 set from=lipingchang@pystandard.com set smtp=smtp.pystandard.com set smtp-aut ...
- mysql 事务隔离级别 详解
问题 在工作中真实遇到的问题:用python连接mysql,查询数据,同时有别的代码在更新mysql中的数据,前者是一直是保持连接的数据库,每一分钟select一次,但第二次却查不到更新后的数据?wh ...
- 2013-2014 ACM-ICPC Brazil Subregional Programming Contest 题解
[题目链接] 这场比赛题面英文都好长... ... A - Zero or One 模拟. #include <bits/stdc++.h> using namespace std; in ...
- codevs 1795 金字塔 2
codevs 1795 金字塔 2这个题比完全背包多了一个总数的限制,即一定要选(m+n)个,题中说总重量不超过n,所以至少选择m个重量为0的,然后初始化的时候,都填成重量为0的,然后再一个个地把它们 ...
- Eclipse中从svn中检出maven项目
相信很多初学者都遇到过Eclipse中从SVN检出Maven项目之后看到的目录结构并不是Maven目录结构:或者只能先用SVN将Maven项目签入到本地,然后再用Eclipse导入Maven项目,但是 ...
- ScrollView中嵌套GridView,Listview的办法
按照android的标准,ScrollView中是不能嵌套具有滑动特性的View的,但是有时如果设计真的有这样做的需要,或者为了更方便简单的实现外观(比如在外在的大布局需要有滑动的特性,并且内部有类似 ...