孟彬
(西安翻譯學(xué)院,西安 710105)
微軟公司旗下有兩款使用桌面數(shù)據(jù)庫(kù)開(kāi)發(fā)工具,一個(gè)是源自兼并的FOX Software公司的FoxPro,其更高版本為VFP(全稱(chēng)Visual FoxPro),另一個(gè)是微軟Microsoft Office中的成員ACCESS[1]。VFP作為微軟公司的一款基于Windows操作平臺(tái)的關(guān)系數(shù)據(jù)庫(kù)管理軟件,具備了簡(jiǎn)單易學(xué)、操作簡(jiǎn)便、開(kāi)發(fā)成本低、可視化強(qiáng)等優(yōu)點(diǎn),但在數(shù)據(jù)安全問(wèn)題上存在一些缺陷[2]。而ACCESS具有較高的安全性。本文從使用者的角度將ACCESS與VFP兩款數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行對(duì)比分析,比較兩者之間的差異,闡述ACCESS數(shù)據(jù)庫(kù)中的對(duì)象及編程方法,引導(dǎo)VFP用戶(hù)過(guò)渡到ACCESS的使用中來(lái)。
VFP提供了面向?qū)ο蟮某绦蛟O(shè)計(jì)工具,使用向?qū)?、設(shè)計(jì)器和生成器使得設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序更為簡(jiǎn)單、快速、靈活,充分發(fā)揮了其可視化強(qiáng)、編程技術(shù)面向?qū)ο蠛褪录?qū)動(dòng)方式的優(yōu)勢(shì)。但是在數(shù)據(jù)安全上,由于DBF文件只是具有一定格式的文本文件,數(shù)據(jù)庫(kù)本身無(wú)法保證數(shù)據(jù)的安全。隨著Office系列軟件使用的普及,ACCESS數(shù)據(jù)庫(kù)管理系統(tǒng)也被越來(lái)越多的用戶(hù)接受并使用。ACCESS是微軟把數(shù)據(jù)庫(kù)引擎的圖形用戶(hù)界面和軟件開(kāi)發(fā)工具結(jié)合在一起的一個(gè)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),具有功能強(qiáng)大、易學(xué)易用、界面友好等優(yōu)點(diǎn),ACCESS共有表、查詢(xún)、窗體、報(bào)表、宏、模塊6類(lèi)數(shù)據(jù)庫(kù)對(duì)象,提供了多種向?qū)А⑸善骱湍0?,?guī)范了數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)查詢(xún)、界面設(shè)計(jì)等操作,并通過(guò)眾多的內(nèi)建向?qū)?、友好的用?hù)界面以及微軟辦公軟件的的高度整合能力,使得普通用戶(hù)不須編寫(xiě)程序,也使得ACCESS成為越來(lái)越多非專(zhuān)業(yè)人士的最佳選擇[3];另外相比VFP而言,ACCESS文件單一,具有較高的安全性,并與Office中的VBA、網(wǎng)站腳本編程語(yǔ)言VBScript有著直接聯(lián)系,應(yīng)用較為廣泛。
盡管ACCESS的使用及編程方法同VFP有很多相似之處,但是由于兩種軟件在文件組織、數(shù)據(jù)類(lèi)型、編程語(yǔ)言等方面與VFP有很大的差異,使得很多的VFP用戶(hù)在學(xué)習(xí)ACCESS時(shí)感到困惑,甚至放棄對(duì)ACCESS的學(xué)習(xí)。本文通過(guò)對(duì)VFP和ACCESS從以下幾方面進(jìn)行比較分析,幫助傳統(tǒng)VFP用戶(hù)利用已知的VFP知識(shí)更方便地學(xué)習(xí)ACCESS。
2.1 數(shù)據(jù)庫(kù)內(nèi)容
1)兩種軟件的文件組織方式不同。VFP創(chuàng)建的數(shù)據(jù)庫(kù)中包含表、程序、查詢(xún)、索引、報(bào)表、菜單等各種類(lèi)型的文件,這些文件通過(guò)項(xiàng)目統(tǒng)一進(jìn)行管理,并存儲(chǔ)于磁盤(pán)中; 相對(duì)ACCESS的數(shù)據(jù)庫(kù)由表(Table)、查詢(xún)(Query)、窗體(Form)、報(bào)表(Report)、宏(Macro)以及模塊(Module)6種數(shù)據(jù)庫(kù)對(duì)象組成,并將所有對(duì)象保存在一個(gè)數(shù)據(jù)庫(kù)文件中,擴(kuò)展名是“.Mdb”[4]。
2)在VFP中表可以設(shè)置字段的名稱(chēng)、值域、默認(rèn)值、輸入掩碼等屬性,但是索引的建立、維護(hù)和使用必須通過(guò)Index on,set index to等命令操作完成。在ACCESS中字段屬性的設(shè)置更加方便和靈活,例如要為表中某字段建立索引,只需在表的設(shè)計(jì)視圖中通過(guò)選擇該字段的索引屬性即可,包括索引的建立、維護(hù)和使用都可以通過(guò)ACCESS中表的設(shè)計(jì)視圖完成。
3)在VFP中如果要?jiǎng)?chuàng)建表間關(guān)系,多對(duì)一和一對(duì)多的關(guān)系的創(chuàng)建需要通過(guò)set relation、set skip命令來(lái)完成,而ACCESS中的表間關(guān)系創(chuàng)建在圖形界面中就可操作,如果需要保證相關(guān)表中記錄之間關(guān)系的有效性,杜絕意外操作更改或刪除相關(guān)數(shù)據(jù),可以在圖形界面中建立數(shù)據(jù)參照完整性,同時(shí)選中級(jí)聯(lián)更新與級(jí)聯(lián)刪除即可。另外需要注意VFP中的記錄刪除分為兩種,可恢復(fù)的邏輯刪除和不可恢復(fù)的物理刪除,而ACCESS中的記錄刪除無(wú)法恢復(fù)。
4)在VFP中的查詢(xún)是只讀的,且選擇查詢(xún)的功能有限。相比較ACCESS中查詢(xún)使用靈活,功能強(qiáng)大。ACCESS中的查詢(xún)實(shí)質(zhì)就是SQL的數(shù)據(jù)操縱語(yǔ)言,利用查詢(xún)可以查看、更改和分析數(shù)據(jù);通過(guò)查詢(xún)可以完成對(duì)表、記錄、字段的多數(shù)操作;在進(jìn)行選擇查詢(xún)時(shí),還可以在表與查詢(xún)間建立關(guān)系,查詢(xún)結(jié)果也可以作為窗體和報(bào)表的記錄來(lái)源。
2.2 數(shù)據(jù)類(lèi)型
1)在VFP中,如果定義數(shù)值型的字段,要求給出字段類(lèi)型、字段寬度和小數(shù)位數(shù)3個(gè)屬性,當(dāng)在該字段內(nèi)存放數(shù)據(jù)時(shí),VFP會(huì)自動(dòng)將數(shù)據(jù)后面的小數(shù)部分進(jìn)行四舍五入,只保留設(shè)定位數(shù)的小數(shù)部分。在ACCESS數(shù)據(jù)庫(kù)中數(shù)值類(lèi)型的字段種類(lèi)較多,包括短整型、長(zhǎng)整型、單精度、雙精度和貨幣型,用戶(hù)定義時(shí)首先選擇其中一種類(lèi)型,在此基礎(chǔ)上設(shè)置字段屬性,但和VFP不同,設(shè)置ACCESS小數(shù)位數(shù)和格式的主要功能是用于確定數(shù)據(jù)的顯示方式,如果存儲(chǔ)數(shù)據(jù)時(shí)需要用戶(hù)直接將數(shù)據(jù)按照要求處理后再進(jìn)行輸入[5]。除此之外,VFP和ACCESS數(shù)據(jù)庫(kù)中的數(shù)據(jù)類(lèi)型還有一些區(qū)別,在下面表1中顯示了兩種數(shù)據(jù)庫(kù)管理系統(tǒng)的數(shù)據(jù)類(lèi)型的不同之處。
2)在VFP中,如果存儲(chǔ)記錄時(shí)沒(méi)有在字段中輸入具體內(nèi)容,則文本型字段的內(nèi)容自動(dòng)保存為空字符串、數(shù)值型字段的內(nèi)容自動(dòng)保存為零值。而在ACCESS中如果存儲(chǔ)記錄時(shí)沒(méi)有在字段中輸入具體內(nèi)容,字段中值自動(dòng)保存為空值NULL,NULL在ACCESS中不能賦予非Variant變量。
2.3 表中記錄序號(hào)
在VFP中查看表,默認(rèn)表瀏覽窗口中每條記錄前面都會(huì)顯示記錄號(hào)。在ACCESS中通過(guò)數(shù)據(jù)表視圖方式顯示的數(shù)據(jù)沒(méi)有記錄號(hào),但可以通過(guò)將表中第一個(gè)字段定義為“自動(dòng)編號(hào)”類(lèi)型來(lái)顯示記錄號(hào)。
2.4 編程語(yǔ)言
在程序語(yǔ)言方面,VFP除了同Xbase語(yǔ)言的相容能力外,同時(shí)引入了部分的SQL語(yǔ)言與全新的控件向?qū)дZ(yǔ)言[6]。ACCESS則是以Basic語(yǔ)言為基礎(chǔ),并加入了部分SQL語(yǔ)言,如果比較簡(jiǎn)單的程序設(shè)計(jì)可以使用宏[7]。
表1 VFP數(shù)據(jù)類(lèi)型和ACCESS數(shù)據(jù)類(lèi)型比較
2.5 應(yīng)用領(lǐng)域及規(guī)模
在數(shù)據(jù)處理量方面,VFP比ACCESS寬松許多,因此VFP更適合開(kāi)發(fā)文件服務(wù)器的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)。在報(bào)表設(shè)計(jì)能方面,ACCESS顯得更加出色。在規(guī)模方面,VFP屬于中型數(shù)據(jù)庫(kù)開(kāi)發(fā)軟件,ACCESS嚴(yán)格來(lái)說(shuō)很少用于商業(yè)用途的開(kāi)發(fā),并且只能在Office環(huán)境下運(yùn)行,受Office本身的限制,規(guī)模屬于小型的數(shù)據(jù)庫(kù)應(yīng)用軟件。
前面已經(jīng)討論了VFP和ACCESS兩個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)之間的主要差異,其實(shí)兩者之間也有很多相通的地方,甚至可以相互轉(zhuǎn)化[8]。
3.1 VFP向ACCESS轉(zhuǎn)化
ActiveX Data Objects(ADO)是Microsoft提出的應(yīng)用程序接口,用以實(shí)現(xiàn)訪(fǎng)問(wèn)關(guān)系或非關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)。Microsoft ActiveX Data Objects Extensions for Data Definition Language and Security (ADOX) 是對(duì) ADO 對(duì)象和編程模型的擴(kuò)展,可以使用Create,Append和Delete對(duì)數(shù)據(jù)庫(kù)進(jìn)行創(chuàng)建、修改和刪除?,F(xiàn)假設(shè)在VFP環(huán)境下,創(chuàng)建ACCESS數(shù)據(jù)庫(kù)于F:,命名為“db1. Mdb”,密碼“1234”,可以通過(guò)以下代碼實(shí)現(xiàn)ACCESS數(shù)據(jù)庫(kù)的建立和對(duì)象的釋放關(guān)閉。
V catalog=CREATEOBJECT(‘ADOX. Catalog')
V catalog CREATE(‘Provider=Microsoft Jet OLEDB.4.0;Data Source=F:db1.mdb;Jet OLEDB:Database Password=1234')
V catalog=null
連接好ACCESS數(shù)據(jù)庫(kù)后,就可以用SQL語(yǔ)言來(lái)實(shí)現(xiàn)ACCESS數(shù)據(jù)表的創(chuàng)建。
3.2 ACCESS向VFP轉(zhuǎn)化
首先存儲(chǔ)表名,使用SQLTABLES函數(shù)將ACCESS的表名存儲(chǔ)到VFP中的臨時(shí)表,然后再將表中的記錄進(jìn)行轉(zhuǎn)存,在轉(zhuǎn)存記錄是需要注意這兩種數(shù)據(jù)庫(kù)的表的數(shù)據(jù)類(lèi)型要匹配。ACCESS數(shù)據(jù)庫(kù)連接成功后,列出MDB表信息到ResTable表中,創(chuàng)建一個(gè)DBC文件,選擇ResTable并遍歷游標(biāo),生成SQL SELECT的語(yǔ)句字符串,其中包含了ACCESS數(shù)據(jù)表中的內(nèi)容,再通過(guò)SQLEXEC將表內(nèi)容發(fā)送至臨時(shí)表中,最后將臨時(shí)表保存到VFP數(shù)據(jù)庫(kù)中。
眾所周知,了解和掌握一個(gè)新的軟件需要投入很多的時(shí)間和精力,也會(huì)遇到很多的困難。本文通過(guò)分析比較VFP和ACCESS兩款數(shù)據(jù)庫(kù)管理系統(tǒng)的主要功能上的差異,以及兩者之間相互轉(zhuǎn)換的方法,旨在幫助VFP用戶(hù)向ACCESS過(guò)渡學(xué)習(xí)時(shí)能根據(jù)自身原本VFP知識(shí)的掌握情況,可以更輕松的投入到ACCESS的學(xué)習(xí)中去,盡快的理解和使用一款新的開(kāi)發(fā)數(shù)據(jù)庫(kù)管理系統(tǒng)軟件。
[1] 劉慧.從VF到ACCESS的過(guò)渡學(xué)習(xí)[J].硅谷,2009(21):96.
[2] 傅榮會(huì). 三種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的比較研究[J]. 重慶三峽學(xué)院學(xué)報(bào),2011,27(132):58-59.
[3] 劉慧. 對(duì)VF用戶(hù)如何學(xué)好ACCESS的探討[J].硅谷,2009(20):24-26.
[4] 崔再惠. Access數(shù)據(jù)庫(kù)與SQL Server數(shù)據(jù)庫(kù)主要功能的比較[J]. 鞍山師范學(xué)院學(xué)報(bào),2009,11(6):51-52.
[5] 李會(huì)瓊. 基于Visual FoxPro環(huán)境下Access數(shù)據(jù)庫(kù)的操作應(yīng)用分析[J]. 電腦編程技巧與維護(hù),2013(2):25-26.
[6] 黎升洪.Access數(shù)據(jù)庫(kù)應(yīng)用與VBA編程[M].北京:中國(guó)鐵道出版社,2011.
[7] 張小莉. Visual FoxPro程序設(shè)計(jì)教程[M].北京:科學(xué)出版社,2016.
[8] 王永國(guó),張士江,謝倩.基于Visual FoxPro環(huán)境ACCESS數(shù)據(jù)庫(kù)操作的實(shí)現(xiàn)[J]. 計(jì)算機(jī)技術(shù)與發(fā)展,2012,21(1):95-99.