一个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相互转换的更多相关文章

  1. 一个ClientDataset的Delta与XML相互转换

    一个ClientDataset的Delta与XML相互转换的文章: 大家都知道TClientDataSet的Delta属性保存数据集的变化,但是Delta是OleVariant类型的属性,这样如果用D ...

  2. java对象与xml相互转换 ---- xstream

    XStream是一个Java对象和XML相互转换的工具,很好很强大.提供了所有的基础类型.数组.集合等类型直接转换的支持. XStream中的核心类就是XStream类,一般来说,熟悉这个类基本就够用 ...

  3. Excel与XML相互转换 - C# 简单实现方案

    Excel与XML相互转换 - C# 简单实现方案 在日常工作中,我需要将数据存储在Excel中进行数据分析和处理,然后再将数据转换为XML格式进行跨平台的数据交换.网上搜索Excel转换为XML的实 ...

  4. JSON对象与XML相互转换工具类

    依赖jar <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId ...

  5. C#实体类与XML相互转换

    1.实体类与XML相互转换 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化. 把XML转换成相应的实体类,需要使用到XmlSerializer类的De ...

  6. 玩转Java对象和XML相互转换

    最近在项目中一直出现Java对象和XML之间的相互转换,一开始由于项目很庞大,我又是临时调度过去,导致在按照项目组长的要求进行写代码的同时,总是在这块云里雾里,最近才慢慢开始搞清楚项目中具体的使用缘由 ...

  7. php array(object) 与xml相互转换

    private function _array_to_xml($source, $charset='utf-8'){ $array = json_decode($source); $pre = '&l ...

  8. PHP数组和XML相互转换的函数

    //数组转xml function ArrToXml($arr) { if(!is_array($arr) || count($arr) == 0) return ''; $xml = "& ...

  9. JSON 序列化与反序列化, 与XML相互转换.

    方式一: 使用于 JavaScriptSerializer类 适用于普通场景, Excel导入导出, 前台传输查询参数直接处理等. JavaScriptSerializer serializer = ...

随机推荐

  1. centos7 搭建DHCP服务器

    一.DHCP简单讲解 DHCP就是动态主机配置协议(Dynamic Host Configuration Protocol)是一种基于UDP协议且仅限用于局域网的网络协议,它的目的就是为了减轻TCP/ ...

  2. Android 使用自定义字体

    整个项目要使用第三方字体首先将字体文件放到assets文件夹下 因为整个项目要用第三方字体这里我重写了 TextView Button EditText 三个控件 以TextView 为例代码如下   ...

  3. jQuery对象的获取与操作方法总结

    一.文章概述: 众所周知,jQuery 是一个 JavaScript 库,包含多个可重用的函数,用来辅助我们简化javascript开发,它极大地简化了 JavaScript 编程.但是需要注意的一点 ...

  4. UE4中使用URL图片

    转自:http://www.52vr.com/article-911-1.html

  5. Javascript-关于break、continue、return语句

    JS-break:break语句会使运行的程序立刻退出包含在最内层的循环或者退出一个switch语句.由于它是用来退出循环或者switch语句,所以只有当它出现在这些语句时,这种形式的break语句才 ...

  6. sql-datediff

    SQL中DateDiff的用法 DATEDIFF返回跨两个指定日期的日期和时间边界数. 语法DATEDIFF ( datepart , startdate , enddate ) 参数datepart ...

  7. MySQL-MMM实现MySQL高可用

    一.MMM简介 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序.MMM使用Perl语言开发,主要用来监控 ...

  8. 零基础学习python_with(34课)

    今天学习的with语句,with的表达形式如下:据说context必须是上下文管理器,这我就懵比了,啥玩意啊... with语句的表达形式: with context as var:    block ...

  9. 《C++数据结构-快速拾遗》 基础常识

    1.命名空间函数 namespace wjy { void print() { cout<<"; } int load(int num) { return num; } } us ...

  10. js常用内置对象

    数组Array 1创建方式 var colors = ['red','color','yellow']; var colors2 = new Array(); 2数组的赋值 var arr = []; ...