lientDataset的Delta与XML相互转换
一个ClientDataset的Delta与XML相互转换的文章:
大家都知道TClientDataSet的Delta属性保存数据集的变化,但是Delta是OleVariant类型的属性,这样如果用Delphi写Webservice,就有需要把它转成XML,特别是其他语言也要用这个Webservice的时候,因为如果Delta能和XML相互转换,Delta包的结构就是透明的了。而TClientDataSet却没有提供DeltaXML这样的属性,之前在网上找了一下,发现网上的都是把Delta赋给另一个TClientDataSet的Data,然后再通过XMLData返回XML,但这样为了一个简单的功能就得多创建一个对象实例,感觉很不好,于是研究一下TClientDataSet的源码,终于完成了Delta与XML相互转换的函数,代码如下:
unit uDelta; interface uses DBClient,DSIntf,VarUtils,ActiveX; function DeltaToXML(Delta:OleVariant):String;
function XMLToDelta(XMLData:String):OleVariant; implementation procedure Check(FDSBase:IDSBase;Status: DBResult);
var
ErrMsg: array[..] of Char;
begin
if Status <> then
begin
FDSBase.GetErrorString(Status, ErrMsg);
raise EDBClient.Create(ErrMsg, Status);
end;
end; function DeltaToXML(Delta:OleVariant):String;
var
FDSBase: IDSBase;
DataPacket: TDataPacket;
VarPacket: OleVariant;
begin
CreateDbClientObject(CLSID_DSBase, IDSBase, FDSBase);
SafeArrayCheck(ActiveX.SafeArrayCopy(VarToDataPacket(Delta), DataPacket));
Check(FDSBase,FDSBase.AppendData(DataPacket, True));
FDSBase.SetProp(dspropXML_STREAMMODE, xmlON);
Check(FDSBase,FDSBase.StreamDS(DataPacket));
DataPacketToVariant(DataPacket, VarPacket);
Result := VariantArrayToString(VarPacket);
//FreeDataPacket(DataPacket);
end; function XMLToDelta(XMLData:String):OleVariant;
var Delta:OleVariant;
DataPacket: TDataPacket;
FDSBase: IDSBase;
begin
Delta:=StringToVariantArray(XMLData);
SafeArrayCheck(SafeArrayCopy(VarToDataPacket(Delta), DataPacket));
CreateDbClientObject(CLSID_DSBase, IDSBase, FDSBase);
Check(FDSBase,FDSBase.AppendData(DataPacket, True));
FDSBase.SetProp(dspropXML_STREAMMODE, xmlOFF);
Check(FDSBase,FDSBase.StreamDS(DataPacket));
DataPacketToVariant(DataPacket, Result);
//FreeDataPacket(DataPacket);
end; end.
lientDataset的Delta与XML相互转换的更多相关文章
- 一个ClientDataset的Delta与XML相互转换
一个ClientDataset的Delta与XML相互转换的文章: 大家都知道TClientDataSet的Delta属性保存数据集的变化,但是Delta是OleVariant类型的属性,这样如果用D ...
- java对象与xml相互转换 ---- xstream
XStream是一个Java对象和XML相互转换的工具,很好很强大.提供了所有的基础类型.数组.集合等类型直接转换的支持. XStream中的核心类就是XStream类,一般来说,熟悉这个类基本就够用 ...
- Excel与XML相互转换 - C# 简单实现方案
Excel与XML相互转换 - C# 简单实现方案 在日常工作中,我需要将数据存储在Excel中进行数据分析和处理,然后再将数据转换为XML格式进行跨平台的数据交换.网上搜索Excel转换为XML的实 ...
- JSON对象与XML相互转换工具类
依赖jar <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId ...
- C#实体类与XML相互转换
1.实体类与XML相互转换 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化. 把XML转换成相应的实体类,需要使用到XmlSerializer类的De ...
- 玩转Java对象和XML相互转换
最近在项目中一直出现Java对象和XML之间的相互转换,一开始由于项目很庞大,我又是临时调度过去,导致在按照项目组长的要求进行写代码的同时,总是在这块云里雾里,最近才慢慢开始搞清楚项目中具体的使用缘由 ...
- php array(object) 与xml相互转换
private function _array_to_xml($source, $charset='utf-8'){ $array = json_decode($source); $pre = '&l ...
- PHP数组和XML相互转换的函数
//数组转xml function ArrToXml($arr) { if(!is_array($arr) || count($arr) == 0) return ''; $xml = "& ...
- JSON 序列化与反序列化, 与XML相互转换.
方式一: 使用于 JavaScriptSerializer类 适用于普通场景, Excel导入导出, 前台传输查询参数直接处理等. JavaScriptSerializer serializer = ...
随机推荐
- 云中树莓派(3):通过 AWS IoT 控制树莓派上的 Led
云中树莓派(1):环境准备 云中树莓派(2):将传感器数据上传到AWS IoT 并利用Kibana进行展示 云中树莓派(3):通过 AWS IoT 控制树莓派上的Led 云中树莓派(4):利用声音传感 ...
- Levenberg-Marquardt 的 MATLAB 代码
参考资料: 1,<精通MATLAB最优化计算(第2版)>作者:龚纯 等 的 第9章 9.3 小节 L-M 法 2,<数值分析> 作者:Timothy Sauer 的 第4章 4 ...
- k8s service网络
资源 从整体来看,Kubernetes集群是由很多由JSON或者YAML定义的‘资源’组成,我个人比较推崇使用YAML写配置,因为它读写都很容易,同时还支持注释. 在Kubernetes中启动一个应用 ...
- Linux系统安装(centos6.8)符破解码
1.安装 VMware VMware 是一个虚拟 PC 的软件,可以在现有的操作系统上虚拟出一个新的硬件环境,相当于模拟出一台新的 PC,我们可以在上面构造出一个或多个别的系统,以此来实现在一台机器上 ...
- [UE4]name slot一个种应用技巧
如图所示“MouseOver”是一个Child Widget,是一个按钮. “Image_0”跟“MouseOver”是重叠在一起的,这样“Image_0”就会挡住“MouseOver”按钮的事件响应 ...
- Socket的长连接和短连接
讨论Socket必讨论长连接和短连接 一.长连接和短连接的概念 1.长连接与短连接的概念:前者是整个通讯过程,客户端和服务端只用一个Socket对象,长期保持Socket的连接:后者是每次请求,都新建 ...
- Linux程序的执行
一.多任务协调机制 $ find /boot | cpio -ocB > /tmp/boot.img 程序执行方式——流式处理 “|”是匿名管道 管道分匿名管道,命名管道.匿名管道属于临时工,随 ...
- ubuntu 16.04 启用root用户方法,SSH允许root登陆
1.使用:sudo passwd root设置root的密码,如下图所示: 2.使用su root来测试是否可以进入root用户,如果出现#说明已经设置root用户的密码成功,如下图所示: 3.进入到 ...
- 08 bash特性--shell脚本编程入门
shell脚本编程入门 编程语言介绍 编程语言分为:机械语言.汇编语言和高级语言: 计算机能识别的语言为机械语言,而人类能学习的并且能够方便掌握的为高级语言,所以,我们所编写的程序就要通过编译来转换成 ...
- JavaWeb学习总结(三)——Tomcat服务器学习和使用
收藏 JavaWeb学习总结(三)——Tomcat服务器学习和使用 http://www.cnblogs.com/xdp-gacl/p/3744053.html