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. LightOJ 1319 Monkey Tradition(中国剩余定理)

    题目链接:https://vjudge.net/contest/28079#problem/U 题目大意:给你n(n<12)行,每行有pi,ri,求一个数ans满足ans%pi=ri(i从1~n ...

  2. beego学习笔记(4):开发文档阅读(2)

    bee工具的安装和使用 bee 工具是一个为了协助快速开发 beego 项目而创建的项目,通过 bee 您可以很容易的进行 beego 项目的创建.热编译.开发.测试.和部署. go get gith ...

  3. csu 1803(余数分类)

    1803: 2016 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 565  Solved: 364[Submit][Status][Web Board ...

  4. Jury Jeopardy(反向模拟)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAy8AAAI7CAIAAABqfzNeAAAgAElEQVR4nOy9e2AU1d3/f2ov07q166

  5. MYSQL-----IFNULL()函数的用法

    Mysql查询中可以使用IFNULL()函数,IFNULL函数中有两个参数,它的作用是测试如果ifnull第一个参数不为null,就会显示出查询的结果,如果第一个参数为null,则会返回第二个参数的字 ...

  6. loadrunner生成随机uuid的方法

    在globals.h中定义方法: 方法: 1.将生成GUID方法放在新建的GUID.h文件中: 2.把这个文件放入脚本保存处: 3.在globals.h中增加函数头“#include "GU ...

  7. spring_150906_sqlmapclientdaosupport_getSqlMapClientTemplate

    添加到ibatis相关jar包! 实体类: package com.spring.model; public class DogPet { private int id; private String ...

  8. vim常见操作命令

    打开多文件vim file1 file2:open/:e 不关闭vim打开文件 分帧窗口:new 新窗口:sp 横向:vsp 纵向ctrl+w窗口切换:tabc 关闭当前窗口:tabo 关闭所有窗口: ...

  9. 20169211《Linux内核原理与分析》第四周作业

    20169211<Linux内核原理与分析>第四周作业内容列表 1.教材第3.5章节知识学习总结: 2.实验楼配套实验二实验报告: 1.<linux内核设计与实现>教材第3.5 ...

  10. jquery选择器详细说明

    jquery中选择器感觉是用的特别多并且特别方便的一个方法,今天就在这里详细的记载下大多数常用的选择器,一起学习探讨. 首先介绍的是css3的选择器,其中包括了标签选择器(div),ID选择器(#ID ...