收藏 分销(赏)

第二十二章-C++-Builder上的XML应用-C++-Builder--简体中文版.ppt

上传人:快乐****生活 文档编号:14637264 上传时间:2026-10-23 格式:PPT 页数:78 大小:2.12MB 下载积分:10 金币
下载 相关
第二十二章-C++-Builder上的XML应用-C++-Builder--简体中文版.ppt_第1页
第1页 / 共78页
第二十二章-C++-Builder上的XML应用-C++-Builder--简体中文版.ppt_第2页
第2页 / 共78页


点击查看更多>>
资源描述
按一下以编辑母片标题样式,按一下以编辑母片文字样式,第二层,第三层,第四层,第五层,*,第二十二章 C+Builder上的XML应用,XML(eXtensible Markup Language),可扩展标示语言是最近兴起的标示语言,由于使用方便而逐渐广泛应用在数据的交换与表示上,因此,,Borland,在,C+Builder 6,上加入了对,XML,的支持,让一般使用者可以透过更简便的方式来使用,XML,格式的档案,或是透过,XML,档案做些额外的应用。,大纲,21-1XML简介,21-2XML,基本存取组件的使用,21-3使用Data Binding辅助工具,21-4MyBase,个人数据库,21-5MyBase,进阶应用,22-1.XML简介,XML是eXtensible Markup Language的缩写,中文译为可扩展标示语言或可延伸性标示语言,由W3C(World Wide Web Consortium)所制定,并于 1998 年 2 月成为推荐规格,该语言和HTML同为SGML所衍伸出来的语言,而 SGML(全名为Standard Generalized Markup Language)是国际标准组织(ISO)于1986年审核通过的一种文字及文件国际标准,不过却因格式复杂、文件开发不易和解读困难等缺点而一直无法广泛被使用于企业界或是网络上,但简化后的版本如HTML和XML等却被广泛使用,其中HTML成为网页格式的标准而普遍使用在网络上,而XML则继HTML后成为目前最受瞩目的标记语言。,22-1.XML简介,HTML,因为简单易学而广泛被使用,但相对的也有其缺点而限制了它的使用弹性,因此当宽带、无线网络环境逐渐成为主流时,它的困境也就越来越明显了,底下为几个,HTML,的缺点:,文件内容与显示格式无法分离,导致,HTML,的内容无法有效的转移到其它平台上,因为显示格式的安排可能受限于使用的环境,如手机和,PDA,上由于屏幕大小的限制便无法像浏览器般显示过多的美工排版与内容,而必须对排版方式做些修正,此外,传统,HTML,档案亦无法作为显示风格随使用者不同而变的个人化网页服务,但这些在,XML,档案下皆能轻易完成,如手机上使用的,WAP,便是一种,XML,档案。,22-1.XML简介,HTML,文件主要着重在显示格式的设定,而非文件内容的纪录,因此并没有完整的架构来纪录文件的内容,但对于企业或是数据处理来说,文件的内容才是处理的重心,譬如对于一份订单来说,企业所在意的并不是订单有多漂亮,而是订单的商品内容和数量,但从,HTML,档案中却无法清楚的了解订单的项目和数量,因此并不适合作为内容纪录和数据处理的依据,更不能作为资料交换的依据,此外,结构过于松散亦增添企业内对,HTML,档案内容进行处理的困难,譬如,这个标签需要对应的结尾标签,,但,却不需要,而这没有对称性的架构却大大增加处理的困难。,相对于上述,HTML,所面临的困境,,XML,档皆找到合适的解决方案,而这正是,XML,能兴起的主因。,22-1.XML简介,XML,具备底下几个特性,而这些特性正式其优于,HTML,的地方。,允许使用者自订卷标和属性:也就是卷标和属性名称可以自订,而不像,HTML,般是固定的,此外,卷标和属性名称的大小写是区别的。,完整的阶层架构:也就是,XML,为一个,Well-Formed,文件,而,Well-Formed,文件的规格有二:,所有的标签名称皆需要对应一个结尾卷标,如,卷标对应,或当卷标间数据为空时以,代表起始卷标和结尾卷标,底下均为标准的标签用法。,22-1.XML简介,卷标和结尾卷标必须在同一阶层,也就是所有的标签以巢状循环形式出现,内层的卷标其结尾卷标必定在内层出现,不允许在外层出现的情形,下面为正确范例和错误范例的比较。,任意阶层数的巢状结构:只要卷标和对应的结尾标签符合巢状形式出现,则并没有限制每个标签内所允许的阶层数目,因此大大增加应用的弹性。,允许对档案格式进行验证:透过验证档案的指定,可对,XML,内容进行验证的动作,检查各标签内容是否被验证档案所允许,以确保档案内容在编辑修改时能保持其一致性。,22-1.XML简介,从上面档案中可看到一份,XML,档案根据内容用途可简单划分为四区:文件宣告区、文件型态定义区、排版样式定义区和文件内容区,简述如下:,文件宣告区:,文件宣告区为一份,XML,文件所不可少的部分,其中的第一列必须宣告此文件为一个,XML,档案和指定其版本讯息,除此,还可额外指定其使用的编码方式或是宣告是否有其它档案配合使用,底下均为合法的,XML,宣告范例:,最基本的,XML,宣告,22-1.XML简介,指定,XML,的编码方式为,Big5,繁体中文。,指定,XML,的编码方式外,还指定该,XML,档案为单独存在,并没有引用别的档案内容。,此外,在基本的宣告之后,还可以选择性的对文件型态和排版样式进行定义,其中的文件型态用来规范,XML,文件的内容,而排版样式则定义,XML,文件在显示时的呈现方式。,22-1.XML简介,底下为一个简单的,DTD,范例,在这个范例中我们对前面的,myemployee.xml,档案的内容进行定义。,myemployee.dtd档案内容,22-1.XML简介,除了透过,DTD,档案进行验证外,我们亦可透过,XML Schema,的使用来达到同样的目的。,XML Schema,为,DTD,后所提出来用以定义,XML,文件的标准,之所以会被提出且逐渐取代,DTD,档案在于其有底下几个优点:,和,XML,文件的语法相同,:从上面的,DTD,档案示范中可以发现,,DTD,的语法和,XML,档案的语法是完全不同的,因此,学习,DTD,语法将成为使用者额外的负担,而,XML Schema,改进这个缺点,使用和,XML,文件相同的语法。,提供更弹性的文件标准设定,:,DTD,语法在文件的定义上,提供了过少的数据型态和设定弹性,因此,对于复杂的文件定义,往往无法如使用者所想进行规范,而这也是,XML Schema,推出的主因之一。在,XML Schema,中,不但提供了多样的数据型态设定,还提供对范围设定和条件设定的支持,因此更能满足不同使用者的需求。,22-1.XML简介,我们透过简单的图表说明两者间的差异:,比较,DTD,XML Schema,语法,承袭,SGML,的,DTD,而来,因此有属于自己的一套语法规范,和,XML,的语法内容完全不同。,完全依照,XML,文件的语法标准。本身即为一个,XML,档案。,数据型态,只提供CDATA、ENUMERATED、NMTOKEN、NMTOKENS、ID、IDREF、ENTITY、ENTITIES和NOTATION等十种数据型态。,除了DTD所提供的型态外,而提供如Date、Boolean、Float、Double和Integer等数十种的数据型态。,格式设定,不支援。,允许对数据格式进行设定,如,ddd,限制数据格式为三位数的数字。,22-1.XML简介,myemployee.xsd档案,22-1.XML简介,22-1.XML简介,22-1.XML简介,上述的程序代码相较于DTD 档案略为复杂,但却能提供更详细的文件定义。至于XML Schema文件定义的引用方式则如下所示:,22-1.XML简介,排版样本定义,除了对文件内容的定义外,,XML,档案还可就显示的格式进行定义,也就是所谓的内容和排版分离。如此,,XML,档案就能专注于对内容的纪录,而把排版,(,或呈现,),的工作交给排版样本来定义。,XML,档案的排版样本定义称为,XSL,,本身亦为一遵循,XML,语法的,XML,档案。底下为,myemployee.xml,档案的简单排版样式定义:,员工基本数据,员工编号,员工姓名,电话号码,22-1.XML简介,此档案转换myemployee.xml为HTML中的窗体形式对内容进行呈现。简单说来,XSL档案所做的事为把XML中对应的标签依照XSL指定的内容进行置换的工作,因此,除了对排版内容进行定义外,还可透过对标签的置换达到文件交换的功用。,右边为myemployee.xml档案有无搭配XSL档案在浏览器中的差别。,没有,XSL,档案,指定,XSL,档案,22-1.XML简介,文件内容区,文件内容区即,XML,文件储存内容的地方,透过自订标签的方式配合,Well-Formed,的格式即能表示,XML,文件的内容,若该份文件指定,DTD,或是,XML Schema,档案对内容进行定义,则整份,XML,文件还必须符合,DTD,或,XML Schema,中的定义。,XML,相关档案间的关系,22-2.XML,基本组件的存取使用,常用的 XML文件存取方法有两种:DOM和SAX,DOM,:全名为,Document Object Model,。存取,XML,文件的方法为把整份,XML,文件先加载到内存中形成一个树状结构,再透过对个别树状节点的控制来达成存取文件的目的,因此,效率会比较差,但对,XML,文件的存取却比较方便。,SAX,:全名为,Simple API for XML,。该方法仅加载部分,XML,文件内容进行分析,进而读取,XML,文件内容,由于每次的加载动作仅读取部分的,XML,文件内容而非整份,XML,文件,因此在使用效率上比,DOM,来的佳,但却有操作不易等缺点。,在,C+Builder,中则使用,DOM,方法作为存取,XML,档案的依据。透过不同厂商实作的,DOM Interface,便可对,XML,文件进行存取的动作。然而,,DOM Interface,的定义十分复杂,在使用上极不方便,为此,,C+Builder,封装,Microsoft,所实作的,MS DOM,为,XMLDocument,组件以方便使用者对,XML,组件存取的动作,而透过,XMLDocument,组件的辅助,存取,XML,文件内容也变得简单许多。,22-2-1.XMLDocument组件,设定分析方法的选项:透过,ParseOptions,属性设定,DOM,分析,XML,内容的方法。此属性的内容取决于,DOMVendor,属性所设定的,DOM,实作厂商,而预设的,MSDOM,则提供了以下几个子属性:,poResolveExternals,、,poValidateOnParse,、,poPreserveWhiteSpace,和,poAsyncLoad,。各子属性功能简述如下:,子属性,功能叙述,poResolveExternals,外部相关的定义在Parse时是否同时考虑,所谓的外部定义包括namespaces、DTD external subsets和external entity references。,poValidateOnParse,设定分析,(Parse),文件内容时,是否去检查该文件有无符合,DTD,或,XML Schema,档案的限制。,poPreserveWhiteSpace,设定是否去掉,XML,文件中的空白符号。,poAsyncLoad,设定是否允许分次进行文件分析的工作。分次分析文件的工作能加速处理,XML,文件的速度,但却可能发生处理节点尚未被,XMLDocument,分析的错误。,22-2-1.XMLDocument组件,设定,Active,属性对文件内容进行分析:在设定,Active,属性为,True,后即可透过,XMLDocument,组件内的方法对,XML,内容进行读取的动作。由于,XMLDocument,组件以树状结构储存加载的,XML,文件,所以对,XML,文件存取的第一步便是利用内建的,DocumentElement,属性回传文件的进入点,而此回传值为,C+Builder,为了简化存取流程所自订的,IXMLNode,接口,(,宣告型态为,_di_IXMLNode),。透过,IXMLNode,接口的回传即可对此节点内的属性值或子节点进行内容读取、新增和删除的动作。底下为,C+Builder,为了简化,XML,文件存取所提供的几个接口,界面,宣告型态,叙述,IXMLDocument,_di_IXMLDocument,该界面表示一份文件。,IXMLNode,_di_IXMLNode,该界面表示,XML,文件上的一个节点。,IXMLNodeList,_di_IXMLNodeList,该接口表示,XML,文件中同一阶层的所有节点。,IXMLNodeCollection,_di_IXMLNodeCollection,该接口表示同一型态的子节点集合。,22-2-1.XMLDocument组件,读取节点,结合上面所述,底下透过实例说明的方式来示范如何对XML文件进行存取的动作。,/读取employee,内的第一笔资料,AnsiString temStr;,_di_IXMLNodeList personList=XMLDocument1-DocumentElement-ChildNodes;,_di_IXMLNodeList person=personList-Nodes1-ChildNodes;,for(int i=0;iCount;i+)/依序显示person节点内的子节点内容,temStr=person-Nodesi-NodeName+:+person-Nodesi-Text;,ShowMessage(temStr);,22-2-1.XMLDocument组件,【,操作实例,22-1】XML,文件的存取,在本实例中,我们读取上一小节的,myemployee.xml,档案,并允许对该档案进行新增数据的动作。,开启新项目,新增组件如下图所示,其中,XMLDocument,组件位于组件样版中的,Internet,页次。,22-2-1.XMLDocument组件,设定,XMLDocument,组件属性如下:,在,【,載入,】,、,【,新增,】,和,【,儲存,】,三個按鈕的,OnClick,事件和表單的,OnShow,事件中加入對應的程式碼。,Main.cpp,程式碼,执行程序。,属性,组件,Name,Active,DOMVendor,XMLDocument,XMLDocument1,True,MSXML,myemployee.xml,22-2-1.XMLDocument组件,【,执行结果,】,执行程序,按下,【,加载,】,按钮即能读取,XML,档案中的所有内容,(,如下图所示,),,此外,按下,【,新增,】,按钮可就数据进行新增的动作。不过,最后必须按下,【,储存,】,按钮才能把新增的数据写入,XML,档案中。,22-2-1.XMLDocument组件,【,实例说明】,XML,文件为一个树状结构。因此在程序中,我们利用,XMLDocument,提供的方法来找寻所要存取的树状节点,并据此进行新增子节点或是读取内容的动作。此外,由于,DOM,的实作方式为把整个,XML,文件加载到内存中进行处理,所以任何的新增或修改动作其实并没有直接反映到,XML,档案中,而是必须透过额外的,SaveToFile,函式来完成。除此,,XMLDocument,组件的,Options,属性内的,doAutoSave,子属性亦能自动储存变更过的,XML,档案。,22-3.使用Data Binding辅助工具,上一小节中,我们利用DOM接口对XML文件进行存取的动作;然而,透过节点找寻的方式对XML标签进行处理不但麻烦也容易产生错误,为此,C+Builder提供了XML Data Binding这套工具。利用对指定XML文件或结构定义(XML、DTD或XML Schema档案)产生对应的DOM接口(Interface)来简化使用者存取XML文件的步骤,也就是透过对接口(Interface)的呼叫即可对指定的节点进行存取的动作,而不再需要一步一步的对树状结构进行检视的动作。底下,我们透过操作实例的说明来教导读者如何使用Data Binding工具。,22-3.使用Data Binding辅助工具,【操作实例22-2】Data Binding Wizard的使用,透过Data Binding Wizard对myemployee.xsd档案产生对应的DOM操作接口以对myemployee.xml文件进行存取的动作。,开启新项目,拖拉,Internet,页次中的,XMLDocument,组件至窗体上,并双击该组件以弹出,Data Binding Wizard,对话框如下。在对话框中,我们选择所要使用的,myemployee.xsd,档案。,22-3.使用Data Binding辅助工具,按下上图的,【Next】,按钮进入下一个设定画面。设定画面会就所选档案内容进行分析,并显示文件的架构如下图所示。此时,请点选左边,Complex Type,下的,Employee,标签,并勾取,Binding Options,中的,Document Element Type,选项如下图。,22-3.使用Data Binding辅助工具,按下上图的,【Next】,按钮即可预览,Data Binding Wizard,对应,myemployee.xsd,所产生的接口,(Interface),与其内的函式,如下图所示。在下图的画面中,透过左下方的选项可设定是否储存,Data Binding Wizard,的设定内容。最后,按下,【Finish】,按钮即产生对应接口的程序代码,(,预设为,myemployee.cpp),。往后,透过,Include,该接口程序代码,即可利用接口,(Interface),所提供的方法对符合,myemployee.xsd,文件定义的,XML,文件进行存取的动作。,22-3.使用Data Binding辅助工具,回到主窗体画面,设计主窗体画面如下并设定,XMLDocument,组件的,属性为,myemployee.xml,。,加入對應三個按鈕的程式片段。,Main.cpp,程式碼,在,Main.h,中加入,#include“myemployee.h”,,其中,,myemployee.cpp,为接口的内容所在。,执行程序。,22-3.使用Data Binding辅助工具,【,执行结果】,【,实例说明】,本实例和前一个实例的差别在于本程序透过,Data Binding Wizard,所产生的接口来对,XML,档案进行存取的动作。观察程序代码内容,可发现本实例的程序较为简洁、易读,且也不容易出错,这正是,C+Builder,在,XML,处理上好用的地方。,22-4.MyBase,个人数据库,在第15章中我们曾提及数据库架构分为Single-Tier、Two-Tier和Multi-Tier三种,而MyBase个人数据库即为Single-Tier架构的一种,也就是透过Midas.dll的使用以文字文件或XML档案作为数据储存的媒介。MyBase个人数据库相较于另外一种和Two-Tier架构相似但以Access、Paradox等数据库文件为储存媒介的Single-Tier架构数据库程序有不需借助额外连结机制的优点,因此,在本节中我们将透过XML档案的使用来介绍MyBase个人数据库。,22-4-1.MyBase,的档案来源,MyBase,架构下,取代数据库作为数据集合储存的档案在整个程序中扮演了非常重要的角色,并非一般任意格式档案所能胜任。一般说来,该档案必须能对数据集合的架构和内容进行描述,而数据集合的架构包括了字段型态、字段限制和字段数目等,至于数据内容则为平常所见到的各笔记录。在,C+Builder,中,常用的,MyBase,档案来源有,DataPacket(,数据封包,),和,XML,档案两种。最简单的,DataPacket,档案可透过,ClientDataSet(,或,BDEClientDataSet,、,SQLClientDataSet),组件的,SaveToFile,方法呼叫从现存的数据库中转换而来,方法如下:,透过,ClientDataSet/BDEClientDataSet/SQLClientDataSet,组件设定数据集合的来源和,CommandText,属性指定所要撷取的数据集合内容。数据提供者依组件的不同,可透过,ProviderName,、,RemoteServer/DBConnection/SQLConnection,属性指定。,22-4-1.MyBase,的档案来源,呼叫,Open,方法或是设定,Active,属性接收自数据提供者所传回的数据集合。,执行,SaveToFile,方法储存数据集合内容。该方法可指定所储存的档案形式,有,binary(dfBinary),、,XML(dfXML),和,UTF8-based XML(dfXMLUTF8),三种形式可供选择。,上述步骤产生的档案极为最基本的,Data Packet,档案。下面范例中,我们透过,BDEClientDataSet,组件的使用来转换,C+Builder,提供的,employee.db,档案为一,DataPacket,形式档案。,22-4-1.MyBase,的档案来源,【,范例,22-3】,转换,Paradox,档案为对应的,Data Packet,档案,透过BDEClientDataSet组件的使用转换Paradox类型的档案为Data Packet档案。,窗体画面,属性,组件,Name,DBConnection,AliasName,DatabaseName,DataSet,BDEClientDataSet,BDEClientDataSet1,Database1,-,-,-,Database,Database1,-,BCDEMOS,MyDB,-,DataSource,DataSource1,-,-,-,BDEClientDataSet1,22-4-1.MyBase,的档案来源,主要程式碼:,Main.cpp,【,执行结果,】,执行画面,转换后的Data Packet档案,22-4-1.MyBase,的档案来源,从转换后的,Data Packet,档案可发现,METADATA,卷标纪录数据表所含的字段名称和对应的型态,而,ROWDATA,卷标内则存放数据集合的内容。这样的架构类似数据库中数据表储存数据的方式。,除了透过固定格式的,Data Packet,档案对数据进行储存外,,MyBase,还允许透过自订卷标的方式来储存数据。所谓的自订卷标,XML,档案储存数据其实是透过一个转换机制把自订的,XML,档案转换成标准的,Data Packet,档案后再进行处理,而所有处理后的结果在透过转换的动作从,Data Packet,格式转回自订格式,如此,便完成了自订格式,XML,档案储存数据的动作。为了让这样的一个转换机制能顺利运作,,C+Builder,提供了,XMLTransform,、,XMLTransformProvider,和,XMLTransformClient,等组件,除此,还提供了,XML Mapper,辅助程序帮助进行自订,XML,档案和,Data Packet,档案间对应关系的设定动作。下一小节即就,XML Mapper,的使用方法进行介绍。,22-4-2.XML Mapper工具程序,XML Mapper,辅助程序的主要功用在提供自订格式的,XML,档案和,Data Packet,档案间的转换,透过标签的对应让自订格式的,XML,档案能转成,Data Packet,档案,而,Data Packet,档案亦能转成自订格式的,XML,档案。这样的转换效果让,MyBase,个人数据库在储存媒介的选择上更为弹性,而不需局限在单一的,Data Packet,格式。点选,C+Builder,选单中的,【Tools】,【XML Mapper】,即可开启此一辅助工具。画面如下图所示。而为了方便说明起见,我们将以前面所述的,myemployee.xml,档案进行说明。,22-4-2.XML Mapper工具程序,XML Mapper开启后的画面如下图所示。在画面中,整个程序分为三个显示框:左边显示XML档案的内容;右边显示Data Packet档案的内容;而中间的显示框则设定关于两者之间的对应关系。每个显示框又分为两个不同的页次可供切换。,XML,档案内容,Data Packet档案内容,两者对应关系设定,22-4-2.XML Mapper工具程序,底下即透过前面小节中提到的,myemployee.xml,档案介绍两者间的转换方法:,XML档案,Data Packet档案,在左边的显示框上按下鼠标右键并选择,【Open XML Document】,以开启所要转换的,XML,档案,(,以,myemployee.xml,档案为例,),。开启后将可看到,XML,档案的内容以阶层形式显示在左边的显示框中。,22-4-2.XML Mapper工具程序,在左边显示框中的卷标名称上双击鼠标以选取所要转换的节点,而双击的顺序代表转换后,Data Packet,文件中字段储存的顺序。在此,我们选择,Person,标签下的所有节点进行示范,并选择产生的,Data Packet,档案类型为,Client DataSet,。选择后的画面如下图所示。,选取转换字段,22-4-2.XML Mapper工具程序,转换中间显示框的页次为,Node Properties,以检视每个字段的属性设定内容。在显示框中可针对每个字段进行个别的设定动作。下面为常见的属性设定项目。,属性,叙述,Node Name,设定的节点名称。,Mapped Name,对应Data Packet档的字段名称。,Data Type,节点的数据型态。,Data Format,当,Data Type,为时间型态时,设定该属性以指定字符串和日期之间的转换方式。当,Data Type,为字符串型态时,则设定字符串编码的方式。当,Data Type,为,Binary,时,指定多少个,bit,来表示该数据值。,Max Length,字符串型态时,指定转换后的字段长度,Value Required,设定该节点是否一定要输入数据。也就是不允许空白的数据输入。,22-4-2.XML Mapper工具程序,属性,叙述,Constant Value,该节点的值是否永远固定。,In Primary Key,该节点转换后的字段是否为,Primary Key,。,Default Value,该节点数据是否有默认值。,Enumeration,若节点的值为固定某些值中的一个,则该属性可用以设定节点和字段值之间的转换关系,如节点为布尔值,则可以设定该属性值为,True=Yes False=No,指定转换后的字段数据。设定格式为,NodeValue=FieldValue,。,Min Occurs,设定该节点在父节点内的最少出现次数。,Max Occurs,设定该节点在父节点内的最多出现次数。,22-4-2.XML Mapper工具程序,设定后的画面则如下图所示。在范例中,我们尽量以默认值作为转换的依据。,Node Properities的设定,22-4-2.XML Mapper工具程序,执行选单里的,【Create】,【DataPacket from XML】,即可产生对应的,Data Packet,档案。在右边的,Data Packet,显示框中单击鼠标右键选择,【Save Datapacket】,即可储存产生的,Data Packet,档,画面如下所示。,储存转换后的Data Packet档案,22-4-2.XML Mapper工具程序,在储存,Data Packet,对话框中输入所要储存的档名后即完成整个,Data Packet,档案的产生工作,而产生的,Data Packet,档内容则如下所示。,除了产生已转换后的,Data Packet,档外,,XML mapper,亦允许产生负责对应,XML,Data Packet关系的XTR格式转换档。,22-4-2.XML Mapper工具程序,产生,XTR,转换档,XML Mapper提供的转换档格式共有【Datapacket to XML】和【XML to Datapacket】两种,分别代表Datapacket对XML的转换和XML 对Datapacket的转换,而透过Transform Direction的选择即可指定所产生的转换档类型,再按下【Create and Test Transformation】按钮即可产生转换结果。在此我们以【XML to Datapacket】作为示范,按下【Create and Test Transformation】即产生对应的XTR转换文件,并显示利用该XTR档案所转换的内容,如下两图所示。,Test Transformation对话框,22-4-2.XML Mapper工具程序,关闭Test Transformation对话框后回到XML Mapper的主画面,在【Create and Test Transformation】按钮旁单按鼠标右键选择【Save Transformation】储存产生的XTR档后即完成XTR的产生工作,如下图画面所示。,产生的,XTR,文件即可供,XMLTransform,组件在执行时对自订的,XML,档案进行转换,以转成符合,Data Packet,的格式供,ClientDataSet,组件使用。如此的,MyBase,架构即可以自订的,XML,档案作为储存数据集合的媒介。,22-4-3.MyBase,数据库的实作,在了解,MyBase,数据库的档案来源后,底下我们以操作实例来介绍如何使用,ClientDataSet,组件完成最基本的,MyBase,数据库。在该实例中,我们使用,myemployee.xml,档案经过,XML Mapper,转换后的,Data Packet,格式档案作为储存媒介。,【,操作实例,22-4】,简易的,MyBase,数据库,使用转换后的,Data Packet,格式档案实作简易的,MyBase,数据库。此外,并提供基本的新增、删除和浏览数据功能。,22-4-3.MyBase,数据库的实作,开启新项目,在窗体上建立组件如下图所示。,属性,组件,Name,DataSet,DataSource,ClientDataSet,ClientDataSet1,-,-,DataSource,DataSource1,ClientDataSet1,-,DBGrid,DBGrid1,-,DataSource1,22-4-3.MyBase,数据库的实作,在各個按鈕的,OnClick,事件中加入對應的程式碼如下。,Main.cpp,程式碼,在,ClientDataSet,的,AfterScroll,事件中加入判断是否显示为第一笔和最后一笔资料的程序代码。,void _fastcall TForm1:ClientDataSet1AfterScroll(TDataSet*DataSet),/-,判断是否为数据的第一笔和最后一笔,Button1-Enabled=true;,Button2-Enabled=true;,Button3-Enabled=true;,if(ClientDataSet1-Bof=true),Button2-Enabled=false;,Button1-Enabled=false;,else if(ClientDataSet1-Eof=true),Button3-Enabled=false;,22-4-3.MyBase,数据库的实作,确定,Data Packet,类型的,XML,档案是否存在。在本例中,,myemployee.xml,转换为,Data Packet,类型的,XML,文件名称为,myemployee_dp.xml,。,执行程序。,22-4-3.MyBase,数据库的实作,【,执行结果,】,执行程序后,点选,【,开启连结,】,即可显示档案,(myemployee_dp.xml),中所储存的数据集合,并执行检视、新增或删除的动作。在新增数据的动作中,按下,【,新增,】,按钮即可输入各字段数据,按下,【,确定,】,完成新增输入的动作;在删除数据的动作中,按下,【,删除,】,按钮即可删除纪录指针,(DBGrid,组件箭头所指处,),所指纪录。最后,在尚未关闭连结前按下,【,取消变更,】,按钮皆可删除对数据集合所作的变更。,22-4-3.MyBase,数据库的实作,【,实例说明,】,在本程序中,透过,ClientDataSet,组件的,LoadFromFile,读取,Data Packet,格式的档案作为,ClientDataSet,组件内数据集合的来源,并据此利用数据集合提供的方法,如:,First(,移到第一笔纪录,),、,Prior(,前移一笔纪录,),、,Insert(,新增纪录,),和,Delete(,删除纪录,),来完成对数据进行检视、新增和删除的动作。有别于一般数据集合组件的地方在于,ClientDataSet,组件会加载数据集合的所有纪录于内存中,并透过,Delta,属性来纪录对数据集合所作的变更,直到,ApplyUpdates,或,SaveToFile,函式呼叫后才把变更的数据存回远程的数据集合或档案中。因此,可透过,CancelUpdates,方法的呼叫来取消,Delta,中纪录的变更达到复原的效果。最后,在关闭数据链路时透过,SaveToFile,的呼叫储存所作的变更至,Data Packet,档案中。,22-5.MyBase,进阶应用,上一小节中,透过,Data Packet,类型档案的使用,我们实作了基本的,MyBase,程序,而本节中我们将延伸上一小节的应用来强化,MyBase,的功能,包括,Briefcase,功能的介绍和以自订标签的,XML,档案作为储存媒介。,22-5-1.MyBase的Briefcase功能,22-5-2.MyBase,的,XML,档案直接储存,22-5-1.MyBase的Briefcase功能,所谓的,Briefcase,其实就是行动计算的应用。允许应用程序的数据集合来源可根据环境的不同而有所选择:当和数据库的连结中断时,可以把资料转储存在本机的档案中;当和数据库重新连上线时,所有记录在本机档案中的变更可立即反映到数据库中,让两者的数据趋于一致。这样的应用对需要存取数据库内数据但又时常无法和数据库联机的使用者,(,如业务员,),来说十分有用,譬如业务员在公司透过网络抓取数据库中的客户数据,然后带着笔记型计算机和顾客谈生意,并对这些从数据库中读取的数据进行修改的动作,则其回到公司后透过,Briefcase,的功能即可自动更新在外面谈生意时对数据库内数据所作的变更,而不再需要额外的人力来确保数据的一致性。,MyBase,的,Briefcase,功能即除了以档案储存数据内容外,亦可和远程的数据库连结,并反映,MyBase,中的变更于远程数据库中,同时抓取远程数据库中的内容达到数据一致的效果。为此,,C+Builder,根据数据库联机方式的不同提供了,BDEClientDataSet,和,SQLClientDataSet,两个组件来辅助这类程序的开发,分别适用于,BDE,和,dbExpress,联机环境下。在此,仅透过,BDEClientDataSet,组件的使用来实作,MyBase,数据库的,Briefcase,功能。,22-5-1.MyBase的Briefcase功能,【操作实例22-5】MyBase的Briefcase功能,透过,BDEClientDataSet,组件的使用实作,MyBase,的程序开发,并增加了和远程数据库连结的能力。也就是能把本机端对数据集合的修改传送到远程数据库,并更新数据库内的数据内容,达到所谓的,Briefcase,效果。,开启新项目,设计窗体画面如下图所示。,22-5-1.MyBase的Briefcase功能,属性,组件,Name,AliasName,DatabaseName,DataSet,TableName,DataSource,Database,Da
展开阅读全文

开通  VIP、SVIP  下载更划算
下载10份以上建议开通 VIP 会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        关注我们

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服