《C++Builder入門(mén)》_第1頁(yè)
《C++Builder入門(mén)》_第2頁(yè)
《C++Builder入門(mén)》_第3頁(yè)
《C++Builder入門(mén)》_第4頁(yè)
《C++Builder入門(mén)》_第5頁(yè)
已閱讀5頁(yè),還剩74頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、整理課件,1,第二十二章 C+ Builder上的XML應(yīng)用,XML(eXtensible Markup Language)可擴(kuò)展標(biāo)示語(yǔ)言是最近興起的標(biāo)示語(yǔ)言,由於使用方便而逐漸廣泛應(yīng)用在資料的交換與表示上,因此,Borland在C+ Builder 6上加入了對(duì)XML的支援,讓一般使用者可以透過(guò)更簡(jiǎn)便的方式來(lái)使用XML格式的檔案,或是透過(guò)XML檔案做些額外的應(yīng)用,整理課件,2,大綱,21-1XML簡(jiǎn)介 21-2XML基本存取元件的使用 21-3使用Data Binding輔助工具 21-4MyBase個(gè)人資料庫(kù) 21-5MyBase進(jìn)階應(yīng)用,整理課件,3,22-1. XML簡(jiǎn)介,XML是eX

2、tensible Markup Language的縮寫(xiě),中文譯為可擴(kuò)展標(biāo)示語(yǔ)言或可延伸性標(biāo)示語(yǔ)言,由W3C(World Wide Web Consortium)所制定,並於 1998 年 2 月成為推薦規(guī)格,該語(yǔ)言和HTML同為SGML所衍伸出來(lái)的語(yǔ)言,而 SGML(全名為Standard Generalized Markup Language)是國(guó)際標(biāo)準(zhǔn)組織(ISO)於1986年審核通過(guò)的一種文字及文件國(guó)際標(biāo)準(zhǔn),不過(guò)卻因格式複雜、文件開(kāi)發(fā)不易和解讀困難等缺點(diǎn)而一直無(wú)法廣泛被使用於企業(yè)界或是網(wǎng)路上,但簡(jiǎn)化後的版本如HTML和XML等卻被廣泛使用,其中HTML成為網(wǎng)頁(yè)格式的標(biāo)準(zhǔn)而普遍使用在網(wǎng)路上

3、,而XML則繼HTML後成為目前最受矚目的標(biāo)記語(yǔ)言,整理課件,4,22-1. XML簡(jiǎn)介,HTML因?yàn)楹?jiǎn)單易學(xué)而廣泛被使用,但相對(duì)的也有其缺點(diǎn)而限制了它的使用彈性,因此當(dāng)寬頻、無(wú)線網(wǎng)路環(huán)境逐漸成為主流時(shí),它的困境也就越來(lái)越明顯了,底下為幾個(gè)HTML的缺點(diǎn): 文件內(nèi)容與顯示格式無(wú)法分離,導(dǎo)致HTML的內(nèi)容無(wú)法有效的轉(zhuǎn)移到其他平臺(tái)上,因?yàn)轱@示格式的安排可能受限於使用的環(huán)境,如手機(jī)和PDA上由於螢?zāi)淮笮〉南拗票銦o(wú)法像瀏覽器般顯示過(guò)多的美工排版與內(nèi)容,而必須對(duì)排版方式做些修正,此外,傳統(tǒng)HTML檔案亦無(wú)法作為顯示風(fēng)格隨使用者不同而變的個(gè)人化網(wǎng)頁(yè)服務(wù),但這些在XML檔案下皆能輕易完成,如手機(jī)上使用的WA

4、P便是一種XML檔案,整理課件,5,22-1. XML簡(jiǎn)介,固定標(biāo)籤限制了使用彈性。HTML的標(biāo)籤決定於W3C訂定的版本,也就是所有的標(biāo)籤名稱(chēng)在每一版本的HTML規(guī)格中是固定的,如下圖即為HTML的標(biāo)準(zhǔn)格式,並無(wú)法對(duì)標(biāo)籤名稱(chēng)進(jìn)行修改,且每個(gè)標(biāo)籤所允許的屬性亦是固定的,因此,這些固定名稱(chēng)和屬性就限制了HTML使用的彈性,譬如瀏覽器和手機(jī)在內(nèi)容呈現(xiàn)上的定義可能不同,自然HTML定的標(biāo)籤和屬性名稱(chēng)對(duì)於手機(jī)來(lái)說(shuō)就不一定適用,整理課件,6,22-1. XML簡(jiǎn)介,HTML文件主要著重在顯示格式的設(shè)定,而非文件內(nèi)容的紀(jì)錄,因此並沒(méi)有完整的架構(gòu)來(lái)紀(jì)錄文件的內(nèi)容,但對(duì)於企業(yè)或是資料處理來(lái)說(shuō),文件的內(nèi)容才是處理

5、的重心,譬如對(duì)於一份訂單來(lái)說(shuō),企業(yè)所在意的並不是訂單有多漂亮,而是訂單的商品內(nèi)容和數(shù)量,但從HTML檔案中卻無(wú)法清楚的了解訂單的項(xiàng)目和數(shù)量,因此並不適合作為內(nèi)容紀(jì)錄和資料處理的依據(jù),更不能作為資料交換的依據(jù),此外,結(jié)構(gòu)過(guò)於鬆散亦增添企業(yè)內(nèi)對(duì)HTML檔案內(nèi)容進(jìn)行處理的困難,譬如這個(gè)標(biāo)籤需要對(duì)應(yīng)的結(jié)尾標(biāo)籤,但卻不需要,而這沒(méi)有對(duì)稱(chēng)性的架構(gòu)卻大大增加處理的困難。 相對(duì)於上述HTML所面臨的困境,XML檔皆找到合適的解決方案,而這正是XML能興起的主因,整理課件,7,22-1. XML簡(jiǎn)介,XML具備底下幾個(gè)特性,而這些特性正式其優(yōu)於HTML的地方。 允許使用者自訂標(biāo)籤和屬性:也就是標(biāo)籤和屬性名稱(chēng)可以

6、自訂,而不像HTML般是固定的,此外,標(biāo)籤和屬性名稱(chēng)的大小寫(xiě)是區(qū)別的。 完整的階層架構(gòu):也就是XML為一個(gè)Well-Formed文件,而Well-Formed文件的規(guī)格有二: 所有的標(biāo)籤名稱(chēng)皆需要對(duì)應(yīng)一個(gè)結(jié)尾標(biāo)籤,如標(biāo)籤對(duì)應(yīng)或當(dāng)標(biāo)籤間資料為空時(shí)以代表起始標(biāo)籤和結(jié)尾標(biāo)籤,底下均為標(biāo)準(zhǔn)的標(biāo)籤用法,整理課件,8,22-1. XML簡(jiǎn)介,標(biāo)籤和結(jié)尾標(biāo)籤必須在同一階層,也就是所有的標(biāo)籤以巢狀迴圈形式出現(xiàn),內(nèi)層的標(biāo)籤其結(jié)尾標(biāo)籤必定在內(nèi)層出現(xiàn),不允許在外層出現(xiàn)的情形,下面為正確範(fàn)例和錯(cuò)誤範(fàn)例的比較。 任意階層數(shù)的巢狀結(jié)構(gòu):只要標(biāo)籤和對(duì)應(yīng)的結(jié)尾標(biāo)籤符合巢狀形式出現(xiàn),則並沒(méi)有限制每個(gè)標(biāo)籤內(nèi)所允許的階層數(shù)目,因此

7、大大增加應(yīng)用的彈性。 允許對(duì)檔案格式進(jìn)行驗(yàn)證:透過(guò)驗(yàn)證檔案的指定,可對(duì)XML內(nèi)容進(jìn)行驗(yàn)證的動(dòng)作,檢查各標(biāo)籤內(nèi)容是否被驗(yàn)證檔案所允許,以確保檔案內(nèi)容在編輯修改時(shí)能保持其一致性,整理課件,9,22-1. XML簡(jiǎn)介,底下為一個(gè)基本的XML檔案範(fàn)例。在範(fàn)例中,我們透過(guò)自訂標(biāo)籤來(lái)儲(chǔ)存員工的基本資料,整理課件,10,22-1. XML簡(jiǎn)介,從上面檔案中可看到一份XML檔案根據(jù)內(nèi)容用途可簡(jiǎn)單劃分為四區(qū):文件宣告區(qū)、文件型態(tài)定義區(qū)、排版樣式定義區(qū)和文件內(nèi)容區(qū),簡(jiǎn)述如下: 文件宣告區(qū): 文件宣告區(qū)為一份XML文件所不可少的部分,其中的第一列必須宣告此文件為一個(gè)XML檔案和指定其版本訊息,除此,還可額外指定其使

8、用的編碼方式或是宣告是否有其他檔案配合使用,底下均為合法的XML宣告範(fàn)例: 最基本的XML宣告,整理課件,11,22-1. XML簡(jiǎn)介,指定XML的編碼方式為Big5繁體中文。 指定XML的編碼方式外,還指定該XML檔案為單獨(dú)存在,並沒(méi)有引用別的檔案內(nèi)容。 此外,在基本的宣告之後,還可以選擇性的對(duì)文件型態(tài)和排版樣式進(jìn)行定義,其中的文件型態(tài)用來(lái)規(guī)範(fàn)XML文件的內(nèi)容,而排版樣式則定義XML文件在顯示時(shí)的呈現(xiàn)方式,整理課件,12,22-1. XML簡(jiǎn)介,文件型態(tài)定義 前面曾經(jīng)介紹XML的優(yōu)點(diǎn)在於能提供文件內(nèi)容驗(yàn)證的機(jī)制,而這個(gè)驗(yàn)證的機(jī)制主要是透過(guò)對(duì)文件型態(tài)的定義來(lái)達(dá)成。該文件型態(tài)定義為一個(gè)DTD(D

9、ocument Type Definition)檔案,透過(guò)該檔案我們可以對(duì)XML文件進(jìn)行如下的定義: 文件的階層架構(gòu)。 標(biāo)籤的內(nèi)容和型態(tài)。 標(biāo)籤屬性,整理課件,13,22-1. XML簡(jiǎn)介,底下為一個(gè)簡(jiǎn)單的DTD範(fàn)例,在這個(gè)範(fàn)例中我們對(duì)前面的myemployee.xml檔案的內(nèi)容進(jìn)行定義。 myemployee.dtd檔案內(nèi)容,整理課件,14,22-1. XML簡(jiǎn)介,上述DTD檔案限定了myemployee.xml檔案的文件型態(tài)如下: Employee標(biāo)籤可含有數(shù)個(gè)Person子標(biāo)籤。 Person標(biāo)籤內(nèi)含Name、EmpId、Salary、PhoneNo、PhoExt和HireDate標(biāo)籤,

10、其中PhoneNo標(biāo)籤的數(shù)目至少一個(gè),但其他標(biāo)籤在Person標(biāo)籤下只能出現(xiàn)一次。 Name、EmpId、Salary、PhoneNo、PhoExt和HireDate標(biāo)籤內(nèi)容由可被剖析的文字資料所構(gòu)成,其中PCDATA為Parser Character Data的縮寫(xiě)。 在驗(yàn)證過(guò)程中,若檔案內(nèi)容不符合DTD所指定的規(guī)則時(shí),將產(chǎn)生錯(cuò)誤的訊息,整理課件,15,22-1. XML簡(jiǎn)介,除了透過(guò)DTD檔案進(jìn)行驗(yàn)證外,我們亦可透過(guò)XML Schema的使用來(lái)達(dá)到同樣的目的。XML Schema為DTD後所提出來(lái)用以定義XML文件的標(biāo)準(zhǔn),之所以會(huì)被提出且逐漸取代DTD檔案在於其有底下幾個(gè)優(yōu)點(diǎn): 和XML文

11、件的語(yǔ)法相同:從上面的DTD檔案示範(fàn)中可以發(fā)現(xiàn),DTD的語(yǔ)法和XML檔案的語(yǔ)法是完全不同的,因此,學(xué)習(xí)DTD語(yǔ)法將成為使用者額外的負(fù)擔(dān),而XML Schema改進(jìn)這個(gè)缺點(diǎn),使用和XML文件相同的語(yǔ)法。 提供更彈性的文件標(biāo)準(zhǔn)設(shè)定:DTD語(yǔ)法在文件的定義上,提供了過(guò)少的資料型態(tài)和設(shè)定彈性,因此,對(duì)於複雜的文件定義,往往無(wú)法如使用者所想進(jìn)行規(guī)範(fàn),而這也是XML Schema推出的主因之一。在XML Schema中,不但提供了多樣的資料型態(tài)設(shè)定,還提供對(duì)範(fàn)圍設(shè)定和條件設(shè)定的支援,因此更能滿足不同使用者的需求,整理課件,16,22-1. XML簡(jiǎn)介,我們透過(guò)簡(jiǎn)單的圖表說(shuō)明兩者間的差異,整理課件,17,2

12、2-1. XML簡(jiǎn)介,更詳細(xì)的XML Schema說(shuō)明請(qǐng)參考坊間XML相關(guān)書(shū)籍,在此,僅提供相對(duì)於myemployee.dtd檔案的XML Schema檔案供讀者參考,兩者同樣可作為myemployee.xml檔案驗(yàn)證之用,整理課件,18,22-1. XML簡(jiǎn)介,myemployee.xsd檔案,整理課件,19,22-1. XML簡(jiǎn)介,整理課件,20,22-1. XML簡(jiǎn)介,整理課件,21,22-1. XML簡(jiǎn)介,上述的程式碼相較於DTD 檔案略為複雜,但卻能提供更詳細(xì)的文件定義。至於XML Schema文件定義的引用方式則如下所示,整理課件,22,22-1. XML簡(jiǎn)介,排版樣本定義 除了對(duì)

13、文件內(nèi)容的定義外,XML檔案還可就顯示的格式進(jìn)行定義,也就是所謂的內(nèi)容和排版分離。如此,XML檔案就能專(zhuān)注於對(duì)內(nèi)容的紀(jì)錄,而把排版(或呈現(xiàn))的工作交給排版樣本來(lái)定義。XML檔案的排版樣本定義稱(chēng)為XSL,本身亦為一遵循XML語(yǔ)法的XML檔案。底下為myemployee.xml檔案的簡(jiǎn)單排版樣式定義,整理課件,23,22-1. XML簡(jiǎn)介,整理課件,24,22-1. XML簡(jiǎn)介,此檔案轉(zhuǎn)換myemployee.xml為HTML中的表單形式對(duì)內(nèi)容進(jìn)行呈現(xiàn)。簡(jiǎn)單說(shuō)來(lái),XSL檔案所做的事為把XML中對(duì)應(yīng)的標(biāo)籤依照XSL指定的內(nèi)容進(jìn)行置換的工作,因此,除了對(duì)排版內(nèi)容進(jìn)行定義外,還可透過(guò)對(duì)標(biāo)籤的置換達(dá)到文件

14、交換的功用。 右邊為myemployee.xml檔案有無(wú)搭配XSL檔案在瀏覽器中的差別,沒(méi)有XSL檔案,指定XSL檔案,整理課件,25,22-1. XML簡(jiǎn)介,文件內(nèi)容區(qū) 文件內(nèi)容區(qū)即XML文件儲(chǔ)存內(nèi)容的地方,透過(guò)自訂標(biāo)籤的方式配合Well-Formed的格式即能表示XML文件的內(nèi)容,若該份文件指定DTD或是XML Schema檔案對(duì)內(nèi)容進(jìn)行定義,則整份XML文件還必須符合DTD或XML Schema中的定義。 XML相關(guān)檔案間的關(guān)係,整理課件,26,22-2. XML基本元件的存取使用,常用的 XML文件存取方法有兩種:DOM和SAX DOM:全名為Document Object Model

15、。存取XML文件的方法為把整份XML文件先載入到記憶體中形成一個(gè)樹(shù)狀結(jié)構(gòu),再透過(guò)對(duì)個(gè)別樹(shù)狀節(jié)點(diǎn)的控制來(lái)達(dá)成存取文件的目的,因此,效率會(huì)比較差,但對(duì)XML文件的存取卻比較方便。 SAX:全名為Simple API for XML。該方法僅載入部分XML文件內(nèi)容進(jìn)行分析,進(jìn)而讀取XML文件內(nèi)容,由於每次的載入動(dòng)作僅讀取部分的XML文件內(nèi)容而非整份XML文件,因此在使用效率上比DOM來(lái)的佳,但卻有操作不易等缺點(diǎn)。 在C+ Builder中則使用DOM方法作為存取XML檔案的依據(jù)。透過(guò)不同廠商實(shí)作的DOM Interface便可對(duì)XML文件進(jìn)行存取的動(dòng)作。然而,DOM Interface的定義十分複雜

16、,在使用上極不方便,為此,C+ Builder封裝Microsoft所實(shí)作的MS DOM為XMLDocument元件以方便使用者對(duì)XML元件存取的動(dòng)作,而透過(guò)XMLDocument元件的輔助,存取XML文件內(nèi)容也變得簡(jiǎn)單許多,整理課件,27,22-2-1. XMLDocument元件,XMLDocument元件存在於元件樣版中的Internet頁(yè)次 當(dāng)使用該元件時(shí),只需透過(guò)物件檢視器內(nèi)幾個(gè)屬性的設(shè)定,即可完成對(duì)XML文件指定和載入的動(dòng)作,這些屬性的設(shè)定步驟如下: 設(shè)定DOMVendor屬性:透過(guò)該屬性選擇不同廠商所實(shí)作的DOM介面。由於Windows作業(yè)系統(tǒng)本身即提供了DOM介面的支援(MS

17、DOM),所以可直接設(shè)定該屬性值為MSXML即可。 指定讀入的XML文件:透過(guò)Filename屬性指定XML檔案或是以XML屬性讀入TStrings型態(tài)的內(nèi)容。諸如Memo元件的Lines屬性或是ListBox元件的Items屬性皆為T(mén)Strings型態(tài),整理課件,28,22-2-1. XMLDocument元件,設(shè)定分析方法的選項(xiàng):透過(guò)ParseOptions屬性設(shè)定DOM分析XML內(nèi)容的方法。此屬性的內(nèi)容取決於DOMVendor屬性所設(shè)定的DOM實(shí)作廠商,而預(yù)設(shè)的MSDOM則提供了以下幾個(gè)子屬性:poResolveExternals、poValidateOnParse、poPreserve

18、WhiteSpace和poAsyncLoad。各子屬性功能簡(jiǎn)述如下,整理課件,29,22-2-1. XMLDocument元件,設(shè)定Active屬性對(duì)文件內(nèi)容進(jìn)行分析:在設(shè)定Active屬性為T(mén)rue後即可透過(guò)XMLDocument元件內(nèi)的方法對(duì)XML內(nèi)容進(jìn)行讀取的動(dòng)作。由於XMLDocument元件以樹(shù)狀結(jié)構(gòu)儲(chǔ)存載入的XML文件,所以對(duì)XML文件存取的第一步便是利用內(nèi)建的DocumentElement屬性回傳文件的進(jìn)入點(diǎn),而此回傳值為C+ Builder為了簡(jiǎn)化存取流程所自訂的IXMLNode介面(宣告型態(tài)為_(kāi)di_IXMLNode)。透過(guò)IXMLNode介面的回傳即可對(duì)此節(jié)點(diǎn)內(nèi)的屬性值或子

19、節(jié)點(diǎn)進(jìn)行內(nèi)容讀取、新增和刪除的動(dòng)作。底下為C+ Builder為了簡(jiǎn)化XML文件存取所提供的幾個(gè)介面,整理課件,30,22-2-1. XMLDocument元件,利用上面這些介面配合XMLDocument元件所提供的函式即可存取 XML文件內(nèi)容。 下面為對(duì)XML文件新增節(jié)點(diǎn)、刪除節(jié)點(diǎn)和讀取節(jié)點(diǎn)的程式寫(xiě)法: 新增節(jié)點(diǎn) 刪除節(jié)點(diǎn),整理課件,31,22-2-1. XMLDocument元件,讀取節(jié)點(diǎn) 結(jié)合上面所述,底下透過(guò)實(shí)例說(shuō)明的方式來(lái)示範(fàn)如何對(duì)XML文件進(jìn)行存取的動(dòng)作,整理課件,32,22-2-1. XMLDocument元件,操作實(shí)例22-1】XML文件的存取 在本實(shí)例中,我們讀取上一小節(jié)的m

20、yemployee.xml檔案,並允許對(duì)該檔案進(jìn)行新增資料的動(dòng)作。 開(kāi)啟新專(zhuān)案,新增元件如下圖所示,其中XMLDocument元件位於元件樣版中的Internet頁(yè)次,整理課件,33,22-2-1. XMLDocument元件,設(shè)定XMLDocument元件屬性如下: 在【載入】、【新增】和【儲(chǔ)存】三個(gè)按鈕的OnClick事件和表單的OnShow事件中加入對(duì)應(yīng)的程式碼。Main.cpp程式碼 執(zhí)行程式,整理課件,34,22-2-1. XMLDocument元件,執(zhí)行結(jié)果】 執(zhí)行程式,按下【載入】按鈕即能讀取XML檔案中的所有內(nèi)容(如下圖所示),此外,按下【新增】按鈕可就資料進(jìn)行新增的動(dòng)作。不過(guò)

21、,最後必須按下【儲(chǔ)存】按鈕才能把新增的資料寫(xiě)入XML檔案中,整理課件,35,22-2-1. XMLDocument元件,實(shí)例說(shuō)明】 XML文件為一個(gè)樹(shù)狀結(jié)構(gòu)。因此在程式中,我們利用XMLDocument提供的方法來(lái)找尋所要存取的樹(shù)狀節(jié)點(diǎn),並據(jù)此進(jìn)行新增子節(jié)點(diǎn)或是讀取內(nèi)容的動(dòng)作。此外,由於DOM的實(shí)作方式為把整個(gè)XML文件載入到記憶體中進(jìn)行處理,所以任何的新增或修改動(dòng)作其實(shí)並沒(méi)有直接反映到XML檔案中,而是必須透過(guò)額外的SaveToFile函式來(lái)完成。除此,XMLDocument元件的Options屬性?xún)?nèi)的doAutoSave子屬性亦能自動(dòng)儲(chǔ)存變更過(guò)的XML檔案,整理課件,36,22-3. 使用

22、Data Binding輔助工具,上一小節(jié)中,我們利用DOM介面對(duì)XML文件進(jìn)行存取的動(dòng)作;然而,透過(guò)節(jié)點(diǎn)找尋的方式對(duì)XML標(biāo)籤進(jìn)行處理不但麻煩也容易產(chǎn)生錯(cuò)誤,為此,C+ Builder提供了XML Data Binding這套工具。利用對(duì)指定XML文件或結(jié)構(gòu)定義(XML、DTD或XML Schema檔案)產(chǎn)生對(duì)應(yīng)的DOM介面(Interface)來(lái)簡(jiǎn)化使用者存取XML文件的步驟,也就是透過(guò)對(duì)介面(Interface)的呼叫即可對(duì)指定的節(jié)點(diǎn)進(jìn)行存取的動(dòng)作,而不再需要一步一步的對(duì)樹(shù)狀結(jié)構(gòu)進(jìn)行檢視的動(dòng)作。底下,我們透過(guò)操作實(shí)例的說(shuō)明來(lái)教導(dǎo)讀者如何使用Data Binding工具,整理課件,37,2

23、2-3. 使用Data Binding輔助工具,操作實(shí)例22-2】Data Binding Wizard的使用 透過(guò)Data Binding Wizard對(duì)myemployee.xsd檔案產(chǎn)生對(duì)應(yīng)的DOM操作介面以對(duì)myemployee.xml文件進(jìn)行存取的動(dòng)作。 開(kāi)啟新專(zhuān)案,拖拉Internet頁(yè)次中的XMLDocument元件至表單上,並雙擊該元件以彈出Data Binding Wizard對(duì)話框如下。在對(duì)話框中,我們選擇所要使用的myemployee.xsd檔案,整理課件,38,22-3. 使用Data Binding輔助工具,按下上圖的【Next】按鈕進(jìn)入下一個(gè)設(shè)定畫(huà)面。設(shè)定畫(huà)面會(huì)就所

24、選檔案內(nèi)容進(jìn)行分析,並顯示文件的架構(gòu)如下圖所示。此時(shí),請(qǐng)點(diǎn)選左邊Complex Type下的Employee標(biāo)籤,並勾取Binding Options中的Document Element Type選項(xiàng)如下圖,整理課件,39,22-3. 使用Data Binding輔助工具,按下上圖的【Next】按鈕即可預(yù)覽Data Binding Wizard對(duì)應(yīng)myemployee.xsd所產(chǎn)生的介面(Interface)與其內(nèi)的函式,如下圖所示。在下圖的畫(huà)面中,透過(guò)左下方的選項(xiàng)可設(shè)定是否儲(chǔ)存Data Binding Wizard的設(shè)定內(nèi)容。最後,按下【Finish】按鈕即產(chǎn)生對(duì)應(yīng)介面的程式碼(預(yù)設(shè)為mye

25、mployee.cpp)。往後,透過(guò)Include該介面程式碼,即可利用介面(Interface)所提供的方法對(duì)符合myemployee.xsd文件定義的XML文件進(jìn)行存取的動(dòng)作,整理課件,40,22-3. 使用Data Binding輔助工具,回到主表單畫(huà)面,設(shè)計(jì)主表單畫(huà)面如下並設(shè)定XMLDocument元件的FileName屬性為myemployee.xml。 加入對(duì)應(yīng)三個(gè)按鈕的程式片段。Main.cpp程式碼 在Main.h中加入#include “myemployee.h”,其中,myemployee.cpp為介面的內(nèi)容所在。 執(zhí)行程式,整理課件,41,22-3. 使用Data Bin

26、ding輔助工具,執(zhí)行結(jié)果】 【實(shí)例說(shuō)明】 本實(shí)例和前一個(gè)實(shí)例的差別在於本程式透過(guò)Data Binding Wizard所產(chǎn)生的介面來(lái)對(duì)XML檔案進(jìn)行存取的動(dòng)作。觀察程式碼內(nèi)容,可發(fā)現(xiàn)本實(shí)例的程式較為簡(jiǎn)潔、易讀,且也不容易出錯(cuò),這正是C+ Builder在XML處理上好用的地方,整理課件,42,22-4. MyBase個(gè)人資料庫(kù),在第15章中我們?cè)峒百Y料庫(kù)架構(gòu)分為Single-Tier、Two-Tier和Multi-Tier三種,而MyBase個(gè)人資料庫(kù)即為Single-Tier架構(gòu)的一種,也就是透過(guò)Midas.dll的使用以文字檔或XML檔案作為資料儲(chǔ)存的媒介。MyBase個(gè)人資料庫(kù)相較於

27、另外一種和Two-Tier架構(gòu)相似但以Access、Paradox等資料庫(kù)檔為儲(chǔ)存媒介的Single-Tier架構(gòu)資料庫(kù)程式有不需借助額外連結(jié)機(jī)制的優(yōu)點(diǎn),因此,在本節(jié)中我們將透過(guò)XML檔案的使用來(lái)介紹MyBase個(gè)人資料庫(kù),整理課件,43,22-4-1. MyBase的檔案來(lái)源,MyBase架構(gòu)下,取代資料庫(kù)作為資料集合儲(chǔ)存的檔案在整個(gè)程式中扮演了非常重要的角色,並非一般任意格式檔案所能勝任。一般說(shuō)來(lái),該檔案必須能對(duì)資料集合的架構(gòu)和內(nèi)容進(jìn)行描述,而資料集合的架構(gòu)包括了欄位型態(tài)、欄位限制和欄位數(shù)目等,至於資料內(nèi)容則為平常所見(jiàn)到的各筆記錄。在C+ Builder中,常用的MyBase檔案來(lái)源有Da

28、taPacket(資料封包)和XML檔案兩種。最簡(jiǎn)單的DataPacket檔案可透過(guò)ClientDataSet(或BDEClientDataSet、SQLClientDataSet)元件的SaveToFile方法呼叫從現(xiàn)存的資料庫(kù)中轉(zhuǎn)換而來(lái),方法如下: 透過(guò)ClientDataSet/BDEClientDataSet/SQLClientDataSet元件設(shè)定資料集合的來(lái)源和CommandText屬性指定所要擷取的資料集合內(nèi)容。資料提供者依元件的不同,可透過(guò)ProviderName、RemoteServer/DBConnection/SQLConnection屬性指定,整理課件,44,22-4-

29、1. MyBase的檔案來(lái)源,呼叫Open方法或是設(shè)定Active屬性接收自資料提供者所傳回的資料集合。 執(zhí)行SaveToFile方法儲(chǔ)存資料集合內(nèi)容。該方法可指定所儲(chǔ)存的檔案形式,有binary(dfBinary)、XML(dfXML)和UTF8-based XML(dfXMLUTF8)三種形式可供選擇。 上述步驟產(chǎn)生的檔案極為最基本的Data Packet檔案。下面範(fàn)例中,我們透過(guò)BDEClientDataSet元件的使用來(lái)轉(zhuǎn)換C+ Builder提供的employee.db檔案為一DataPacket形式檔案,整理課件,45,22-4-1. MyBase的檔案來(lái)源,範(fàn)例22-3】轉(zhuǎn)換Pa

30、radox檔案為對(duì)應(yīng)的Data Packet檔案 透過(guò)BDEClientDataSet元件的使用轉(zhuǎn)換Paradox類(lèi)型的檔案為Data Packet檔案。 表單畫(huà)面,整理課件,46,22-4-1. MyBase的檔案來(lái)源,主要程式碼:Main.cpp 【執(zhí)行結(jié)果,執(zhí)行畫(huà)面,轉(zhuǎn)換後的Data Packet檔案,整理課件,47,22-4-1. MyBase的檔案來(lái)源,從轉(zhuǎn)換後的Data Packet檔案可發(fā)現(xiàn)METADATA標(biāo)籤紀(jì)錄資料表所含的欄位名稱(chēng)和對(duì)應(yīng)的型態(tài),而ROWDATA標(biāo)籤內(nèi)則存放資料集合的內(nèi)容。這樣的架構(gòu)類(lèi)似資料庫(kù)中資料表儲(chǔ)存資料的方式。 除了透過(guò)固定格式的Data Packet檔案

31、對(duì)資料進(jìn)行儲(chǔ)存外,MyBase還允許透過(guò)自訂標(biāo)籤的方式來(lái)儲(chǔ)存資料。所謂的自訂標(biāo)籤XML檔案儲(chǔ)存資料其實(shí)是透過(guò)一個(gè)轉(zhuǎn)換機(jī)制把自訂的XML檔案轉(zhuǎn)換成標(biāo)準(zhǔn)的Data Packet檔案後再進(jìn)行處理,而所有處理後的結(jié)果在透過(guò)轉(zhuǎn)換的動(dòng)作從Data Packet格式轉(zhuǎn)回自訂格式,如此,便完成了自訂格式XML檔案儲(chǔ)存資料的動(dòng)作。為了讓這樣的一個(gè)轉(zhuǎn)換機(jī)制能順利運(yùn)作,C+ Builder提供了XMLTransform、XMLTransformProvider和XMLTransformClient等元件,除此,還提供了XML Mapper輔助程式幫助進(jìn)行自訂XML檔案和Data Packet檔案間對(duì)應(yīng)關(guān)係的設(shè)定動(dòng)作

32、。下一小節(jié)即就XML Mapper的使用方法進(jìn)行介紹,整理課件,48,22-4-2. XML Mapper工具程式,XML Mapper輔助程式的主要功用在提供自訂格式的XML檔案和Data Packet檔案間的轉(zhuǎn)換,透過(guò)標(biāo)籤的對(duì)應(yīng)讓自訂格式的XML檔案能轉(zhuǎn)成Data Packet檔案,而Data Packet檔案亦能轉(zhuǎn)成自訂格式的XML檔案。這樣的轉(zhuǎn)換效果讓MyBase個(gè)人資料庫(kù)在儲(chǔ)存媒介的選擇上更為彈性,而不需侷限在單一的Data Packet格式。點(diǎn)選C+ Builder選單中的【Tools】【XML Mapper】即可開(kāi)啟此一輔助工具。畫(huà)面如下圖所示。而為了方便說(shuō)明起見(jiàn),我們將以前面所

33、述的myemployee.xml檔案進(jìn)行說(shuō)明,整理課件,49,22-4-2. XML Mapper工具程式,XML Mapper開(kāi)啟後的畫(huà)面如下圖所示。在畫(huà)面中,整個(gè)程式分為三個(gè)顯示框:左邊顯示XML檔案的內(nèi)容;右邊顯示Data Packet檔案的內(nèi)容;而中間的顯示框則設(shè)定關(guān)於兩者之間的對(duì)應(yīng)關(guān)係。每個(gè)顯示框又分為兩個(gè)不同的頁(yè)次可供切換,XML檔案內(nèi)容,Data Packet檔案內(nèi)容,兩者對(duì)應(yīng)關(guān)係設(shè)定,整理課件,50,22-4-2. XML Mapper工具程式,底下即透過(guò)前面小節(jié)中提到的myemployee.xml檔案介紹兩者間的轉(zhuǎn)換方法: XML檔案Data Packet檔案 在左邊的顯示框

34、上按下滑鼠右鍵並選擇【Open XML Document】以開(kāi)啟所要轉(zhuǎn)換的XML檔案(以myemployee.xml檔案為例)。開(kāi)啟後將可看到XML檔案的內(nèi)容以階層形式顯示在左邊的顯示框中,整理課件,51,22-4-2. XML Mapper工具程式,在左邊顯示框中的標(biāo)籤名稱(chēng)上雙擊滑鼠以選取所要轉(zhuǎn)換的節(jié)點(diǎn),而雙擊的順序代表轉(zhuǎn)換後Data Packet檔中欄位儲(chǔ)存的順序。在此,我們選擇Person標(biāo)籤下的所有節(jié)點(diǎn)進(jìn)行示範(fàn),並選擇產(chǎn)生的Data Packet檔案類(lèi)型為Client DataSet。選擇後的畫(huà)面如下圖所示,選取轉(zhuǎn)換欄位,整理課件,52,22-4-2. XML Mapper工具程式,轉(zhuǎn)

35、換中間顯示框的頁(yè)次為Node Properties以檢視每個(gè)欄位的屬性設(shè)定內(nèi)容。在顯示框中可針對(duì)每個(gè)欄位進(jìn)行個(gè)別的設(shè)定動(dòng)作。下面為常見(jiàn)的屬性設(shè)定項(xiàng)目,整理課件,53,22-4-2. XML Mapper工具程式,整理課件,54,22-4-2. XML Mapper工具程式,設(shè)定後的畫(huà)面則如下圖所示。在範(fàn)例中,我們盡量以預(yù)設(shè)值作為轉(zhuǎn)換的依據(jù),Node Properities的設(shè)定,整理課件,55,22-4-2. XML Mapper工具程式,執(zhí)行選單裡的【Create】【DataPacket from XML】即可產(chǎn)生對(duì)應(yīng)的Data Packet檔案。在右邊的Data Packet顯示框中單擊滑

36、鼠右鍵選擇【Save Datapacket】即可儲(chǔ)存產(chǎn)生的Data Packet檔,畫(huà)面如下所示,儲(chǔ)存轉(zhuǎn)換後的Data Packet檔案,整理課件,56,22-4-2. XML Mapper工具程式,在儲(chǔ)存Data Packet對(duì)話框中輸入所要儲(chǔ)存的檔名後即完成整個(gè)Data Packet檔案的產(chǎn)生工作,而產(chǎn)生的Data Packet檔內(nèi)容則如下所示,除了產(chǎn)生已轉(zhuǎn)換後的Data Packet檔外,XML mapper亦允許產(chǎn)生負(fù)責(zé)對(duì)應(yīng)XMLData Packet關(guān)係的XTR格式轉(zhuǎn)換檔,整理課件,57,22-4-2. XML Mapper工具程式,產(chǎn)生XTR轉(zhuǎn)換檔 XML Mapper提供的轉(zhuǎn)換檔

37、格式共有【Datapacket to XML】和【XML to Datapacket】?jī)煞N,分別代表Datapacket對(duì)XML的轉(zhuǎn)換和XML 對(duì)Datapacket的轉(zhuǎn)換,而透過(guò)Transform Direction的選擇即可指定所產(chǎn)生的轉(zhuǎn)換檔類(lèi)型,再按下【Create and Test Transformation】按鈕即可產(chǎn)生轉(zhuǎn)換結(jié)果。在此我們以【XML to Datapacket】作為示範(fàn),按下【Create and Test Transformation】即產(chǎn)生對(duì)應(yīng)的XTR轉(zhuǎn)換檔,並顯示利用該XTR檔案所轉(zhuǎn)換的內(nèi)容,如下兩圖所示,Test Transformation對(duì)話框,整理課件

38、,58,22-4-2. XML Mapper工具程式,關(guān)閉Test Transformation對(duì)話框後回到XML Mapper的主畫(huà)面,在【Create and Test Transformation】按鈕旁單按滑鼠右鍵選擇【Save Transformation】?jī)?chǔ)存產(chǎn)生的XTR檔後即完成XTR的產(chǎn)生工作,如下圖畫(huà)面所示,產(chǎn)生的XTR檔即可供XMLTransform元件在執(zhí)行時(shí)對(duì)自訂的XML檔案進(jìn)行轉(zhuǎn)換,以轉(zhuǎn)成符合Data Packet的格式供ClientDataSet元件使用。如此的MyBase架構(gòu)即可以自訂的XML檔案作為儲(chǔ)存資料集合的媒介,整理課件,59,22-4-3. MyBase

39、資料庫(kù)的實(shí)作,在了解MyBase資料庫(kù)的檔案來(lái)源後,底下我們以操作實(shí)例來(lái)介紹如何使用ClientDataSet元件完成最基本的MyBase資料庫(kù)。在該實(shí)例中,我們使用myemployee.xml檔案經(jīng)過(guò)XML Mapper轉(zhuǎn)換後的Data Packet格式檔案作為儲(chǔ)存媒介。 【操作實(shí)例22-4】簡(jiǎn)易的MyBase資料庫(kù) 使用轉(zhuǎn)換後的Data Packet格式檔案實(shí)作簡(jiǎn)易的MyBase資料庫(kù)。此外,並提供基本的新增、刪除和瀏覽資料功能,整理課件,60,22-4-3. MyBase資料庫(kù)的實(shí)作,開(kāi)啟新專(zhuān)案,在表單上建立元件如下圖所示,整理課件,61,22-4-3. MyBase資料庫(kù)的實(shí)作,在各個(gè)

40、按鈕的OnClick事件中加入對(duì)應(yīng)的程式碼如下。Main.cpp程式碼 在ClientDataSet的AfterScroll事件中加入判斷是否顯示為第一筆和最後一筆資料的程式碼,整理課件,62,22-4-3. MyBase資料庫(kù)的實(shí)作,確定Data Packet類(lèi)型的XML檔案是否存在。在本例中,myemployee.xml轉(zhuǎn)換為Data Packet類(lèi)型的XML檔案名稱(chēng)為myemployee_dp.xml。 執(zhí)行程式,整理課件,63,22-4-3. MyBase資料庫(kù)的實(shí)作,執(zhí)行結(jié)果】 執(zhí)行程式後,點(diǎn)選【開(kāi)啟連結(jié)】即可顯示檔案(myemployee_dp.xml)中所儲(chǔ)存的資料集合,並執(zhí)行檢

41、視、新增或刪除的動(dòng)作。在新增資料的動(dòng)作中,按下【新增】按鈕即可輸入各欄位資料,按下【確定】完成新增輸入的動(dòng)作;在刪除資料的動(dòng)作中,按下【刪除】按鈕即可刪除紀(jì)錄指標(biāo)(DBGrid元件箭頭所指處)所指紀(jì)錄。最後,在尚未關(guān)閉連結(jié)前按下【取消變更】按鈕皆可刪除對(duì)資料集合所作的變更,整理課件,64,22-4-3. MyBase資料庫(kù)的實(shí)作,實(shí)例說(shuō)明】 在本程式中,透過(guò)ClientDataSet元件的LoadFromFile讀取Data Packet格式的檔案作為ClientDataSet元件內(nèi)資料集合的來(lái)源,並據(jù)此利用資料集合提供的方法,如:First(移到第一筆紀(jì)錄)、Prior(前移一筆紀(jì)錄)、In

42、sert(新增紀(jì)錄)和Delete(刪除紀(jì)錄)來(lái)完成對(duì)資料進(jìn)行檢視、新增和刪除的動(dòng)作。有別於一般資料集合元件的地方在於ClientDataSet元件會(huì)載入資料集合的所有紀(jì)錄於記憶體中,並透過(guò)Delta屬性來(lái)紀(jì)錄對(duì)資料集合所作的變更,直到ApplyUpdates或SaveToFile函式呼叫後才把變更的資料存回遠(yuǎn)端的資料集合或檔案中。因此,可透過(guò)CancelUpdates方法的呼叫來(lái)取消Delta中紀(jì)錄的變更達(dá)到復(fù)原的效果。最後,在關(guān)閉資料連結(jié)時(shí)透過(guò)SaveToFile的呼叫儲(chǔ)存所作的變更至Data Packet檔案中,整理課件,65,22-5. MyBase進(jìn)階應(yīng)用,上一小節(jié)中,透過(guò) Data

43、 Packet類(lèi)型檔案的使用,我們實(shí)作了基本的MyBase程式,而本節(jié)中我們將延伸上一小節(jié)的應(yīng)用來(lái)強(qiáng)化MyBase的功能,包括Briefcase功能的介紹和以自訂標(biāo)籤的XML檔案作為儲(chǔ)存媒介。 22-5-1. MyBase的Briefcase功能 22-5-2. MyBase的XML檔案直接儲(chǔ)存,整理課件,66,22-5-1. MyBase的Briefcase功能,所謂的Briefcase其實(shí)就是行動(dòng)計(jì)算的應(yīng)用。允許應(yīng)用程式的資料集合來(lái)源可根據(jù)環(huán)境的不同而有所選擇:當(dāng)和資料庫(kù)的連結(jié)中斷時(shí),可以把資料轉(zhuǎn)儲(chǔ)存在本機(jī)的檔案中;當(dāng)和資料庫(kù)重新連上線時(shí),所有記錄在本機(jī)檔案中的變更可立即反映到資料庫(kù)中,讓

44、兩者的資料趨於一致。這樣的應(yīng)用對(duì)需要存取資料庫(kù)內(nèi)資料但又時(shí)常無(wú)法和資料庫(kù)連線的使用者(如業(yè)務(wù)員)來(lái)說(shuō)十分有用,譬如業(yè)務(wù)員在公司透過(guò)網(wǎng)路抓取資料庫(kù)中的客戶(hù)資料,然後帶著筆記型電腦和顧客談生意,並對(duì)這些從資料庫(kù)中讀取的資料進(jìn)行修改的動(dòng)作,則其回到公司後透過(guò)Briefcase的功能即可自動(dòng)更新在外面談生意時(shí)對(duì)資料庫(kù)內(nèi)資料所作的變更,而不再需要額外的人力來(lái)確保資料的一致性。 MyBase的Briefcase功能即除了以檔案儲(chǔ)存資料內(nèi)容外,亦可和遠(yuǎn)端的資料庫(kù)連結(jié),並反映MyBase中的變更於遠(yuǎn)端資料庫(kù)中,同時(shí)抓取遠(yuǎn)端資料庫(kù)中的內(nèi)容達(dá)到資料一致的效果。為此,C+ Builder根據(jù)資料庫(kù)連線方式的不同提供

45、了BDEClientDataSet和SQLClientDataSet兩個(gè)元件來(lái)輔助這類(lèi)程式的開(kāi)發(fā),分別適用於BDE和dbExpress連線環(huán)境下。在此,僅透過(guò)BDEClientDataSet元件的使用來(lái)實(shí)作MyBase資料庫(kù)的Briefcase功能,整理課件,67,22-5-1. MyBase的Briefcase功能,操作實(shí)例22-5】MyBase的Briefcase功能 透過(guò)BDEClientDataSet元件的使用實(shí)作MyBase的程式開(kāi)發(fā),並增加了和遠(yuǎn)端資料庫(kù)連結(jié)的能力。也就是能把本機(jī)端對(duì)資料集合的修改傳送到遠(yuǎn)端資料庫(kù),並更新資料庫(kù)內(nèi)的資料內(nèi)容,達(dá)到所謂的Briefcase效果。 開(kāi)啟新

46、專(zhuān)案,設(shè)計(jì)表單畫(huà)面如下圖所示,整理課件,68,22-5-1. MyBase的Briefcase功能,整理課件,69,22-5-1. MyBase的Briefcase功能,加入各事件的程式碼如下,包含表單的OnCreate事件和按鈕的OnClick事件。Main.cpp程式碼 執(zhí)行程式,整理課件,70,22-5-1. MyBase的Briefcase功能,執(zhí)行結(jié)果】 按下DBNavigator元件上的各按鈕即可對(duì)MyBase資料庫(kù)內(nèi)的資料進(jìn)行檢視與存取的動(dòng)作;而按下【重新整理】按鈕即可儲(chǔ)存對(duì)記錄所做的變更於MyBase的檔案中;按下【更新至資料庫(kù)】按鈕更可把變更的結(jié)果傳回BDE連結(jié)的資料庫(kù)。在程

47、式中提供了對(duì)MyBase和BDE連結(jié)資料庫(kù)的檢視功能來(lái)方便讀者觀察按下按鈕後不同的執(zhí)行結(jié)果,以了解有無(wú)Briefcase功能的差別,整理課件,71,22-5-1. MyBase的Briefcase功能,實(shí)例說(shuō)明】 本程式的資料來(lái)源主要分為兩個(gè):MyBase資料檔和BDE連結(jié)的資料庫(kù)。其中,MyBase資料檔透過(guò)物件檢視器中指定的FileName屬性、Open與Close方法來(lái)完成存取的動(dòng)作;至於和BDE資料庫(kù)的連結(jié)則透過(guò)物件檢視器中CommandText屬性與ApplyUpdates方法來(lái)完成。值得注意的是FileName屬性必須透過(guò)物件檢視器進(jìn)行指定以避免執(zhí)行Open方法時(shí)從CommandText所指定的內(nèi)容進(jìn)行讀取資料集合的動(dòng)作,也就是必須透過(guò)指定FileName屬性的動(dòng)作來(lái)讓CommandText屬性在Open和Close方法呼叫時(shí)喪失作用,如此才能

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論