ClientDataSet的版本兼容性

在Delphi的早期版本中,Data这个Variant类型的值内部使用的是AnsiString来存贮的字节流,但我并不确定Delphi从什么时候开始,将其改为了Byte数组类型,你可以通过VarType函数来检测它的类型。

1、将数据集的Data保存到MessagePack协议数据流或文件:

var
   AMsgPack:TQMsgPack;
begin
  AMsgPack:=TQMsgPack.Create;
  ...
  AMsgPack.AsVariant:=ClientDataSet1.Data;
  //保存到流AStream中
  AMsgPack.SaveToStream(AStream);
  //或保存到文件AFileName中
  AMsgPack.SaveToFile(AFileName);
  ...
  FreeAndNil(AMsgPack);
end;
 
2、从MessagePack协议数据流或文件中加载到数据集:
var
  AMsgPack:TQMsgPack;
begin
AMsgPack:=TQMsgPack.Create;
//从流AStream中加载
AMsgPack.LoadFromStream(AStream);
//或从文件AFileName中加载
AMsgPack.LoadFromFile(AFileName);
...
ClientDataSet1.Close;
ClientDataSet1.Data:=AMsgPack.AsVariant;
...
FreeAndNil(AMsgPack);
end;
 

对于早期的版本,我们需要做一个转换:

1、从AnsiString转换为TBytes,然后再赋给AMsgPack。

var
  S:AnsiString;
  ABytes:TBytes;
  ...
begin
...
//首先将Data赋给一个字符串对象
S:=ClientDataSet1.Data;
//复制到字节流中
SetLength(ABytes,Length(S));
Move(PAnsiChar(S)^,ABytes[0],Length(S));
//用AsBytes替换AsVariant
AMsgPack.AsBytes:=ABytes;
...
end;
 
2、加载时反过来将字节流反转成AnsiString
var
  S:AnsiString;
  ABytes:TBytes;
  ...
begin
...
//首先将Data赋给一个字符串对象
ABytes:=AMsgPack.AsBytes;
SetLength(S,Length(ABytes));
Move(ABytes[0],PAnsiChar(S)^,Length(ABytes));
//然后将字符串赋给Data就好了。
ClientDataSet1.Data:=S;...
end;
 
 

ClientDataSet的版本兼容性的更多相关文章

  1. 10. 选主算法、多版本兼容性及滚动升级 | 深入浅出MGR

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 选主算法 2. 多版本兼容性 3. MGR 5.7滚动升级至8.0 4. 小结 参考资料.文档 免责声明 文章 ...

  2. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  3. 深入分析windows下配置wamp环境各模块的版本兼容性

    版本相关概念说明: ts/nts: thread safety 线程安全 TS refers to multithread capable builds. NTS refers to single t ...

  4. BAT开发中,ChromeDriver版本兼容性检查

    打开解决方案的Nuget包管理器,选择合适的版本,安装即可.版本的兼容性检查,见上一篇blog(初次使用BAT,请检查Chrome浏览器和ChromeDriver兼容性 https://www.cnb ...

  5. [转]考虑 PHP 5.0~5.6 各版本兼容性的 cURL 文件上传

    FROM : https://segmentfault.com/a/1190000000725185 最近做的一个需求,要通过PHP调用cURL,以multipart/form-data格式上传文件. ...

  6. [置顶] android之Notification版本兼容性问题

    首先先来创建一个notification提示 //概要 String tickerText = context.getResources().getText(R.string.app_name).to ...

  7. PHP 5.0~5.6 各版本兼容性的 cURL 文件上传

    不同版本PHP之间cURL的区别 PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求. 传统上,PHP的cU ...

  8. axios 安卓低版本兼容性处理

    问题: 在较低版本的android手机中发现封装的 http 无效,我测试使用的是android 4.4的老手机,主要就是无法使用promise. 解决方案 安装 npm install es6-pr ...

  9. webpack 中版本兼容性问题错误总结

    一定不要运行npm i  XXX  -g(-d) 一定要指定版本,尽量低版本,也不最新版本,会导致不兼容和指令不一样的问题. 1.安装webpack-dev-server 报错,说需要webpack- ...

随机推荐

  1. HDU 3533 Escape(BFS+预处理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 题目大意:给你一张n* m的地图,人在起点在(0,0)要到达终点(n,m)有k(k<=10 ...

  2. (转)Opencv卷积操作

    转自:http://www.2cto.com/kf/201312/267308.html Mask Operation filter2D函数 Last Edit 2013/12/24 所谓的Mask ...

  3. [你必须知道的.NET]第二十三回:品味细节,深入.NET的类型构造器

    发布日期:2008.11.2 作者:Anytao © 2008 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 今天Artech兄在<关于Type Init ...

  4. go-互斥锁及原子函数

    用于解决并发函数的竞争状态问题... package main import ( "fmt" "runtime" "sync" " ...

  5. ubuntu怎么连接centos远程桌面

    1.系统软件设置CentOS端:查看是否安装了vnc软件# rpm -q vnc vnc-serverpackage vnc is not installedvnc-server-4.1.2-14.e ...

  6. SQL Server中Rowcount与@@Rowcount

    rowcount的用法 rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例, set rowcount 10 select * from 表A 这样的查询只会 ...

  7. 洛谷P3275 [SCOI2011]糖果 [差分约束系统]

    题目传送门 糖果 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比 ...

  8. Void运算符 与 undefined类型

    void 运算符 对给定的表达式进行求值,然后返回 undefined. 何为求值,就是执行之后的表达式. 我们最常见的就是 <a href="javascript: void(0)& ...

  9. Django项目中模板标签及模板的继承与引用【网站中快速布置广告】

    Django项目中模板标签及模板的继承与引用 常见模板标签 {% static %} {% for x in range(x) %}{% endfor %} 循环的序号{% forloop %} 循环 ...

  10. XPath中的text()和string()区别(转)

    原文地址 : http://blog.csdn.net/jiangchao858/article/details/63314426 本质区别 text()是一个node test,而string()是 ...