加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

一个ClientDataset的Delta与XML相互转换

发布时间:2020-12-15 23:02:08 所属栏目:百科 来源:网络整理
导读:一个ClientDataset的Delta与XML相互转换的文章: 大家都知道TClientDataSet的Delta属性保存数据集的变化,但是Delta是OleVariant类型的属性,这样如果用Delphi写Webservice,就有需要把它转成XML,特别是其他语言也要用这个Webservice的时候,因为如果Delta

一个ClientDataset的Delta与XML相互转换的文章:


大家都知道TClientDataSet的Delta属性保存数据集的变化,但是Delta是OleVariant类型的属性,这样如果用Delphi写Webservice,就有需要把它转成XML,特别是其他语言也要用这个Webservice的时候,因为如果Delta能和XML相互转换,Delta包的结构就是透明的了。而TClientDataSet却没有提供DeltaXML这样的属性,之前在网上找了一下,发现网上的都是把Delta赋给另一个TClientDataSet的Data,然后再通过XMLData返回XML,但这样为了一个简单的功能就得多创建一个对象实例,感觉很不好,于是研究一下TClientDataSet的源码,终于完成了Delta与XML相互转换的函数,代码如下:

unituDelta;

interface

usesDBClient,DSIntf,VarUtils,ActiveX;

functionDeltaToXML(Delta:OleVariant):String;
functionXMLToDelta(XMLData:String):OleVariant;

implementation

procedureCheck(FDSBase:IDSBase;Status:DBResult);
var
ErrMsg:array[0..2048]ofChar;
begin
ifStatus<>0then
begin
FDSBase.GetErrorString(Status,ErrMsg);
raiseEDBClient.Create(ErrMsg,Status);
end;
end;

functionDeltaToXML(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;

functionXMLToDelta(XMLData:String):OleVariant;
varDelta:OleVariant;
DataPacket:TDataPacket;
FDSBase:IDSBase;
begin
Delta:=StringToVariantArray(XMLData);
SafeArrayCheck(SafeArrayCopy(VarToDataPacket(Delta),DataPacket));
CreateDbClientObject(CLSID_DSBase,FDSBase);
Check(FDSBase,xmlOFF);
Check(FDSBase,Result);
//FreeDataPacket(DataPacket);
end;

end.


原文出处:
http://hi.baidu.com/0xcea4/item/27f77f338b1abf81c2cf2928

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读