XML映象器
可以单独打开或者在IDE的工具(Tools)菜单中打开映象器(XML Mapper)。这个工具将XML文件影射为类似于数据库中的数据集(DataSet)!在前二篇文章中,我们都使用TXMLDocument组件来处理XML文件或XML绑定的数据。现在,我们不再使用TXMLDocument组件了。我们用XML映象器将XML文件转换成数据包(或反之),这样就可以象我们非常熟悉得那样使用诸如DataSet这样的组件来处理XML数据。
XML映象器可以打开XML文件和数据包文件(*.xml,*.cds),纲文件(*.dtd,*.xdr,*.xsd),库文件(*.xrp)和转换文件(*.xtr)。后面这个转换文件是由映象器自行产生的。现在加载我们在前二篇文章中用到的Clinic.xml文件,看看数据影射成什么样。
如图1所示,Clinic.xml影射为一个Clinics结构,含有若干Clinic子项。每个Clinic有4个域:@No, Title, Date, 和Topics。注意@No是属性,其他3个是元素。
将鼠标移至Clinic节点,按右键,选择"Select All"(Ctrl+A)或者"Select All Children",这样就把@No, Title, Date and Topics各项加到中间的映象表内。此时还没有生成相应的数据集域。
我们再次到Clinic节点按下鼠标右键,选择"Create Datapacket from XML"(Ctrl+D),这时产生了相应的数据包并显示在映象器的右方,如图2所示。
映象器将XML文件转换成4个标准格式的数据包。我们还可以增加或删除数据包。这在B2B场合尤为重要,将接收到的数据(纪录)插入到数据库中。
创建并测试转换
按下Create and Test Transformation按钮,随即d出一个DBGrid窗口,以ClientDataSet数据包格式显示Clinic.xml文件里的数据。数据转换之后,有4种方式存盘。对于初学者来说,可以存回原先的Clinic.xml文件。另外还可以存为包数据文件格式(*.xml),库文件(repository)格式(.xrp)和转换文件格式(*.xtr)。后面的库文件可以被XMLTransform组件(在Data Access标签里)调用。
XML转换
Delphi 6里有3个XML转换组件。TXMLTransformProvider组件通过clinic.xtr文件将原始XML文件转换到ClientDataSet。
举例来说,在Delphi 6的主窗体上安放一个TXMLTransformProvider(在Data Access标签里)。将TransformRead属性的TransformationFile子属性设为clinic.xtr作为数据源。将XMLDataFile设为clinic.xml文件。
然后安放一个ClientDataSet组件,将它的ProviderName属性设为XMLTransformProvider。
现在可以激活ClientDataSet组件了,它将由XMLTransformProvider提供的数据转换过来。它的PacketRecords属性值缺省为-1,表示转换全部XML文件。
要显示数据,我们再加入DataSource和DBGrid组件。将DataSource指向ClientDataSet,DBGrid指向DataSource,就象我们通常使用得那样。结果显示如图3。
现在可以象使用数据库数据那样使用XML文件里的数据了。如果对数据进行了修改,可以调用ClientDataSet.ApplyUpdates方法将改动的数据存回XML文件。
但是这样做是不够的。我们还得启动XML映象器,将创建方式由"XML to Datapacket"改为"Datapacket to XML"。这时如果按下"Create and Test Transformation"键,看到的是空白页。然后将转换结果存为ClinicToXml.xtr文件。
现在,将TXMLTransformationProvider的TransformationWrite属性中的子属性TransformationFile设为ClinicToXml.xtr文件。
最后在主窗体的OnClose事件中加上存盘指令:
ClientDataSet1.ApplyUpdates(-1)
程序退出之前会将作出的数据修改存回XML文件。
这样就为Delphi 6的B2B开发环境BizSnap的虚拟中间层作好了数据准备。
你的表里这个字段存在否?如果是主键你要更新的话你的参数strTblName必须有这个字段相应的值,否则无法安主键查找到相应的数据进行更新
既然是主键,那更新的时候必须得有这个参数,没有这个参数就无法给你找到相应数据
C#中,怎么用DataSet更新数据库?System.Data.SqlClient.SqlDataAdapter mDA = new New System.Data.SqlClient.SqlDataAdapter()
...此处略去几行...
mDA.Update(dataset,“tableName”)
备注:tableName 是你取出数据放在dataset里面的某张表名
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)