鄒勁松
摘 要:ADO作為一種Microsoft最新型的數(shù)據(jù)庫(kù)客戶技術(shù),為客戶提供了多種形式數(shù)據(jù)庫(kù)的高性能訪問(wèn),功能強(qiáng)大且易于使用。本文基于此簡(jiǎn)要介紹了ObjectARX開(kāi)發(fā)環(huán)境及ADO技術(shù)原理,闡述了ObjectARX開(kāi)發(fā)環(huán)境下ADO數(shù)據(jù)庫(kù)接口技術(shù)的應(yīng)用,并在VC++6.0開(kāi)發(fā)環(huán)境下,詳細(xì)介紹如何實(shí)現(xiàn)ADO技術(shù)在ObjectARX開(kāi)發(fā)環(huán)境中的應(yīng)用。
關(guān)鍵字:ADO;ObjectARX;應(yīng)用
1 ObjectARX開(kāi)發(fā)環(huán)境及ARX應(yīng)用程序
ObjectARX開(kāi)發(fā)環(huán)境是在AutoLISP 和ADS兩種系統(tǒng)的基礎(chǔ)上發(fā)展出的第三代開(kāi)發(fā)環(huán)境,同時(shí)也是AutoCAD R13上ARX基礎(chǔ)上形成的第二代面向?qū)ο蟮腃++編程環(huán)境[2]。此外市場(chǎng)上還存在VBA和Visual Lisp等開(kāi)發(fā)環(huán)境。Object ARX開(kāi)發(fā)環(huán)境的最大優(yōu)勢(shì)即在于其為用戶使用和擴(kuò)展AutoCAD提供了十分簡(jiǎn)便的C++程序設(shè)計(jì)接口。同時(shí)ObjectARX內(nèi)部嵌帶一系列動(dòng)態(tài)鏈接庫(kù),這些庫(kù)在運(yùn)行時(shí)和AutoCAD處于相同的地址空間,這就使得ObjectARX可以直接調(diào)用AutoCAD內(nèi)部的核心數(shù)據(jù)庫(kù)數(shù)據(jù)和結(jié)構(gòu)。此外,和Visual C++程序相同,ObjectARX開(kāi)發(fā)環(huán)境一樣可以共享MFC和Windows內(nèi)部的一切資源,這是由于它的這種開(kāi)放式特征,使得ObjectARX開(kāi)發(fā)環(huán)境的使用范圍越來(lái)越廣。
ARX應(yīng)用程序就是客戶在ObjectARX開(kāi)發(fā)環(huán)境下開(kāi)發(fā)的程序。由于在ObjectARX開(kāi)發(fā)環(huán)境的支持下,數(shù)據(jù)對(duì)象都會(huì)有一個(gè)與之相對(duì)應(yīng)的類存在,每個(gè)類也都為開(kāi)發(fā)者提供已封裝好的不同的屬性和使用方法,這種方式為開(kāi)發(fā)者進(jìn)行程序的檢測(cè)和二次開(kāi)發(fā)帶來(lái)很大方便。在ObjectARX的開(kāi)發(fā)環(huán)境下,ARX 應(yīng)用程序不并不是一個(gè)單獨(dú)的進(jìn)程,而是一個(gè)動(dòng)態(tài)連接庫(kù),它可以直接調(diào)用AutoCAD的內(nèi)部代碼,數(shù)據(jù)庫(kù)數(shù)據(jù)、幾何及圖形的造型設(shè)計(jì)系統(tǒng),在ARX應(yīng)用程序運(yùn)行時(shí),用戶可以隨時(shí)拓展AutoCAD內(nèi)部類的功能和使用方式,建立區(qū)別于AutoCAD系統(tǒng)默認(rèn)操作方式的新指令。最重要的,在進(jìn)行ARX應(yīng)用程序開(kāi)發(fā)時(shí),用戶可以很好的借鑒Windows自帶的資源,MFC類庫(kù)中的內(nèi)容和VC++可視化編程環(huán)境,簡(jiǎn)潔高效地開(kāi)發(fā)出Windows風(fēng)格十足的ARX應(yīng)用程序。
2 ADO技術(shù)原理
作為一種ActiveX對(duì)象,ADO共有兩套API編程接口供使用者選擇,一種是采用OLE本身的借口,設(shè)計(jì)時(shí)使用不帶指針的編程語(yǔ)言,例如用戶可以使用VB、VisualLISP或其他腳本語(yǔ)言實(shí)現(xiàn)對(duì)ADO的訪問(wèn)。另一種接口是通過(guò)特定界面,由C++語(yǔ)言提供。ADO是微軟數(shù)據(jù)庫(kù)的一種新型應(yīng)用接口,它是在OLE DB 基礎(chǔ)上的高層數(shù)據(jù)庫(kù)訪問(wèn)方式。通過(guò)詳細(xì)封裝OLE DB內(nèi)容和定義ADO對(duì)象, ADO技術(shù)極大簡(jiǎn)化了程序開(kāi)發(fā)的流程和時(shí)間。因?yàn)锳DO的多通道編程接口和多樣編程語(yǔ)言選擇,所以ADO技術(shù)除了可以面向Visual C++外,同時(shí)可以面向VB、V3等多種其他應(yīng)用開(kāi)發(fā)工具。ActiveX控件形式可應(yīng)用到ADO技術(shù)中,而LabWindowdCVI自身是一種遵循COM規(guī)范的ActiveX控件,很明顯的LabWinowdCVI技術(shù)也可應(yīng)用到ADO技術(shù)中。ADO技術(shù)的明顯優(yōu)勢(shì)在于其應(yīng)用便捷、訪問(wèn)方式靈活、工作速度快、內(nèi)存占用率低。A DO與 OLE D B之間對(duì)象結(jié)構(gòu)相似,但ADO并不完全依賴對(duì)象層次,在實(shí)際應(yīng)用中,使用者只需建立和處理需要考慮的對(duì)象。以下七種對(duì)象共同構(gòu)成ADO的接口,分別是:Connection對(duì)象、Command對(duì)象、Recordset對(duì)象、Fi elds對(duì)象、Parameter對(duì)象。Property對(duì)象和Error對(duì)象。
3 ADO技術(shù)在ObjectARX中的實(shí)現(xiàn)
由于ADO共有兩套API編程接口供使用者選擇,這種ADO的“雙重界面” 性質(zhì)也使得用戶能夠采取兩種方式在C++的程序代碼中調(diào)用ADO。首先用戶可以通過(guò)添加ADO頭文件和OLE DB SDK輸入庫(kù)的方式來(lái)獲取ADO的功能。在編寫(xiě)源代碼時(shí)用戶需添加ADO 的頭文件adoid.h 和adoint.h,并將ADO的輸人庫(kù)adoid.1ib添加至連接器的輸入中,通過(guò)這種方式使用者即可成功使用ADO對(duì)象的實(shí)際功能,訪問(wèn)其內(nèi)部的成員函數(shù)。同樣用戶也可以通過(guò) Visual C + +中的 # impart指令來(lái)獲取相同的ADO功能,而且通過(guò)添加# impart指令調(diào)用A DO庫(kù),可以使用較少的代碼內(nèi)容,節(jié)省工作空間。
Object ARX開(kāi)發(fā)環(huán)境為用戶提供了十分簡(jiǎn)便的C++程序設(shè)計(jì)接口,因此使用者在Object ARX環(huán)境中調(diào)用ADO技術(shù)通常由下列幾個(gè)步驟構(gòu)成:
首先用戶要完成數(shù)據(jù)源的建立。想要完成基于數(shù)據(jù)庫(kù)的應(yīng)用程序, 第一就要要建立相應(yīng)的數(shù)據(jù)庫(kù)。用戶在實(shí)際建立時(shí)可以直接參考我們常用到的數(shù)據(jù)庫(kù)軟件,例如微軟的Access,Visual Foxpro, Oracle等數(shù)據(jù)庫(kù)。
其次要在程序中調(diào)入ADO類型庫(kù)。在ARX程序編寫(xiě)的最開(kāi)始的stdAfx.h頭文件中添加調(diào)用代碼:
#include
#import “c:\programe files\system\ado\msado15.dll”\no_namespace\
rename(“EOF”,”adoEOF”)\rename(“EOS”,”adoEOS”)
上述代碼中的no_namespace 表明定義的對(duì)象不占用名稱空間。在實(shí)際應(yīng)用案例中,有些應(yīng)用程序的對(duì)象很有可能與ADO中定義的對(duì)象名發(fā)生沖突, 因?yàn)槲覀冊(cè)谶@里特別開(kāi)辟一個(gè)名稱空間。若該名稱空間需要被使用, 此語(yǔ)句可修改為re-name_namespace("AdoNS"). Rename語(yǔ)句將ADO中的EOF和EOS修改為adoEOF和adoEOS, 目的就在于防止沖突。其中需要用戶注意的是,msa-do15.dll這個(gè)文件不是必須要在該目錄下,用戶需要根據(jù)實(shí)際情況靈活修改。
再次需要對(duì)COM環(huán)境進(jìn)行工作初始化,并使用Connection對(duì)象連接數(shù)據(jù)庫(kù)。用戶在編寫(xiě)前要在DllMain()函數(shù)中寫(xiě)入COM庫(kù)的初始化代碼:
extern “C”BOOL WINAPIDLLMain
(HINSTANCE hInstance, DWORD dwReason, )
{
AfxOleInit();
…
}
然后客戶就可以使用 Connection、Command對(duì)象進(jìn)行SQL命令的編寫(xiě)和調(diào)用, 也可以使用Recordset對(duì)象獲取結(jié)果記錄集,以便用戶進(jìn)行查詢、處理。
最后在客戶使用完畢ADO數(shù)據(jù)庫(kù)后,關(guān)閉連接釋放對(duì)象即可完成對(duì)ADO庫(kù)的一次調(diào)用。
4 結(jié)論
本文對(duì)ADO在ObjectARX開(kāi)發(fā)環(huán)境中的應(yīng)用進(jìn)行了研究,通過(guò)在ObjectARX開(kāi)發(fā)環(huán)境中應(yīng)用ADO 模型,可以使用戶簡(jiǎn)潔靈活地完成數(shù)據(jù)交互,簡(jiǎn)化語(yǔ)言的編寫(xiě)過(guò)程。
參考文獻(xiàn)
[1]David Seeppa著,肖火,石鈞.葛鈞譯 ADO縮程技術(shù).北京:清華大學(xué)出版社,2001
[2]邵俊昌,李旭東.AutoCAD ObjectAILX200()開(kāi)發(fā)技術(shù)指南[M].北京:電子工業(yè)出版社,2000