孟彬
(西安翻譯學院,西安 710105)
微軟公司旗下有兩款使用桌面數(shù)據(jù)庫開發(fā)工具,一個是源自兼并的FOX Software公司的FoxPro,其更高版本為VFP(全稱Visual FoxPro),另一個是微軟Microsoft Office中的成員ACCESS[1]。VFP作為微軟公司的一款基于Windows操作平臺的關(guān)系數(shù)據(jù)庫管理軟件,具備了簡單易學、操作簡便、開發(fā)成本低、可視化強等優(yōu)點,但在數(shù)據(jù)安全問題上存在一些缺陷[2]。而ACCESS具有較高的安全性。本文從使用者的角度將ACCESS與VFP兩款數(shù)據(jù)庫管理系統(tǒng)進行對比分析,比較兩者之間的差異,闡述ACCESS數(shù)據(jù)庫中的對象及編程方法,引導VFP用戶過渡到ACCESS的使用中來。
VFP提供了面向?qū)ο蟮某绦蛟O計工具,使用向?qū)А⒃O計器和生成器使得設計數(shù)據(jù)庫應用程序更為簡單、快速、靈活,充分發(fā)揮了其可視化強、編程技術(shù)面向?qū)ο蠛褪录?qū)動方式的優(yōu)勢。但是在數(shù)據(jù)安全上,由于DBF文件只是具有一定格式的文本文件,數(shù)據(jù)庫本身無法保證數(shù)據(jù)的安全。隨著Office系列軟件使用的普及,ACCESS數(shù)據(jù)庫管理系統(tǒng)也被越來越多的用戶接受并使用。ACCESS是微軟把數(shù)據(jù)庫引擎的圖形用戶界面和軟件開發(fā)工具結(jié)合在一起的一個關(guān)系數(shù)據(jù)庫管理系統(tǒng),具有功能強大、易學易用、界面友好等優(yōu)點,ACCESS共有表、查詢、窗體、報表、宏、模塊6類數(shù)據(jù)庫對象,提供了多種向?qū)А⑸善骱湍0澹?guī)范了數(shù)據(jù)存儲、數(shù)據(jù)查詢、界面設計等操作,并通過眾多的內(nèi)建向?qū)А⒂押玫挠脩艚缑嬉约拔④涋k公軟件的的高度整合能力,使得普通用戶不須編寫程序,也使得ACCESS成為越來越多非專業(yè)人士的最佳選擇[3];另外相比VFP而言,ACCESS文件單一,具有較高的安全性,并與Office中的VBA、網(wǎng)站腳本編程語言VBScript有著直接聯(lián)系,應用較為廣泛。
盡管ACCESS的使用及編程方法同VFP有很多相似之處,但是由于兩種軟件在文件組織、數(shù)據(jù)類型、編程語言等方面與VFP有很大的差異,使得很多的VFP用戶在學習ACCESS時感到困惑,甚至放棄對ACCESS的學習。本文通過對VFP和ACCESS從以下幾方面進行比較分析,幫助傳統(tǒng)VFP用戶利用已知的VFP知識更方便地學習ACCESS。
2.1 數(shù)據(jù)庫內(nèi)容
1)兩種軟件的文件組織方式不同。VFP創(chuàng)建的數(shù)據(jù)庫中包含表、程序、查詢、索引、報表、菜單等各種類型的文件,這些文件通過項目統(tǒng)一進行管理,并存儲于磁盤中; 相對ACCESS的數(shù)據(jù)庫由表(Table)、查詢(Query)、窗體(Form)、報表(Report)、宏(Macro)以及模塊(Module)6種數(shù)據(jù)庫對象組成,并將所有對象保存在一個數(shù)據(jù)庫文件中,擴展名是“.Mdb”[4]。
2)在VFP中表可以設置字段的名稱、值域、默認值、輸入掩碼等屬性,但是索引的建立、維護和使用必須通過Index on,set index to等命令操作完成。在ACCESS中字段屬性的設置更加方便和靈活,例如要為表中某字段建立索引,只需在表的設計視圖中通過選擇該字段的索引屬性即可,包括索引的建立、維護和使用都可以通過ACCESS中表的設計視圖完成。
3)在VFP中如果要創(chuàng)建表間關(guān)系,多對一和一對多的關(guān)系的創(chuàng)建需要通過set relation、set skip命令來完成,而ACCESS中的表間關(guān)系創(chuàng)建在圖形界面中就可操作,如果需要保證相關(guān)表中記錄之間關(guān)系的有效性,杜絕意外操作更改或刪除相關(guān)數(shù)據(jù),可以在圖形界面中建立數(shù)據(jù)參照完整性,同時選中級聯(lián)更新與級聯(lián)刪除即可。另外需要注意VFP中的記錄刪除分為兩種,可恢復的邏輯刪除和不可恢復的物理刪除,而ACCESS中的記錄刪除無法恢復。
4)在VFP中的查詢是只讀的,且選擇查詢的功能有限。相比較ACCESS中查詢使用靈活,功能強大。ACCESS中的查詢實質(zhì)就是SQL的數(shù)據(jù)操縱語言,利用查詢可以查看、更改和分析數(shù)據(jù);通過查詢可以完成對表、記錄、字段的多數(shù)操作;在進行選擇查詢時,還可以在表與查詢間建立關(guān)系,查詢結(jié)果也可以作為窗體和報表的記錄來源。
2.2 數(shù)據(jù)類型
1)在VFP中,如果定義數(shù)值型的字段,要求給出字段類型、字段寬度和小數(shù)位數(shù)3個屬性,當在該字段內(nèi)存放數(shù)據(jù)時,VFP會自動將數(shù)據(jù)后面的小數(shù)部分進行四舍五入,只保留設定位數(shù)的小數(shù)部分。在ACCESS數(shù)據(jù)庫中數(shù)值類型的字段種類較多,包括短整型、長整型、單精度、雙精度和貨幣型,用戶定義時首先選擇其中一種類型,在此基礎(chǔ)上設置字段屬性,但和VFP不同,設置ACCESS小數(shù)位數(shù)和格式的主要功能是用于確定數(shù)據(jù)的顯示方式,如果存儲數(shù)據(jù)時需要用戶直接將數(shù)據(jù)按照要求處理后再進行輸入[5]。除此之外,VFP和ACCESS數(shù)據(jù)庫中的數(shù)據(jù)類型還有一些區(qū)別,在下面表1中顯示了兩種數(shù)據(jù)庫管理系統(tǒng)的數(shù)據(jù)類型的不同之處。
2)在VFP中,如果存儲記錄時沒有在字段中輸入具體內(nèi)容,則文本型字段的內(nèi)容自動保存為空字符串、數(shù)值型字段的內(nèi)容自動保存為零值。而在ACCESS中如果存儲記錄時沒有在字段中輸入具體內(nèi)容,字段中值自動保存為空值NULL,NULL在ACCESS中不能賦予非Variant變量。
2.3 表中記錄序號
在VFP中查看表,默認表瀏覽窗口中每條記錄前面都會顯示記錄號。在ACCESS中通過數(shù)據(jù)表視圖方式顯示的數(shù)據(jù)沒有記錄號,但可以通過將表中第一個字段定義為“自動編號”類型來顯示記錄號。
2.4 編程語言
在程序語言方面,VFP除了同Xbase語言的相容能力外,同時引入了部分的SQL語言與全新的控件向?qū)дZ言[6]。ACCESS則是以Basic語言為基礎(chǔ),并加入了部分SQL語言,如果比較簡單的程序設計可以使用宏[7]。

表1 VFP數(shù)據(jù)類型和ACCESS數(shù)據(jù)類型比較
2.5 應用領(lǐng)域及規(guī)模
在數(shù)據(jù)處理量方面,VFP比ACCESS寬松許多,因此VFP更適合開發(fā)文件服務器的數(shù)據(jù)庫應用系統(tǒng)。在報表設計能方面,ACCESS顯得更加出色。在規(guī)模方面,VFP屬于中型數(shù)據(jù)庫開發(fā)軟件,ACCESS嚴格來說很少用于商業(yè)用途的開發(fā),并且只能在Office環(huán)境下運行,受Office本身的限制,規(guī)模屬于小型的數(shù)據(jù)庫應用軟件。
前面已經(jīng)討論了VFP和ACCESS兩個數(shù)據(jù)庫管理系統(tǒng)之間的主要差異,其實兩者之間也有很多相通的地方,甚至可以相互轉(zhuǎn)化[8]。
3.1 VFP向ACCESS轉(zhuǎn)化
ActiveX Data Objects(ADO)是Microsoft提出的應用程序接口,用以實現(xiàn)訪問關(guān)系或非關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)。Microsoft ActiveX Data Objects Extensions for Data Definition Language and Security (ADOX) 是對 ADO 對象和編程模型的擴展,可以使用Create,Append和Delete對數(shù)據(jù)庫進行創(chuàng)建、修改和刪除?,F(xiàn)假設在VFP環(huán)境下,創(chuàng)建ACCESS數(shù)據(jù)庫于F:,命名為“db1. Mdb”,密碼“1234”,可以通過以下代碼實現(xiàn)ACCESS數(shù)據(jù)庫的建立和對象的釋放關(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ù)庫后,就可以用SQL語言來實現(xiàn)ACCESS數(shù)據(jù)表的創(chuàng)建。
3.2 ACCESS向VFP轉(zhuǎn)化
首先存儲表名,使用SQLTABLES函數(shù)將ACCESS的表名存儲到VFP中的臨時表,然后再將表中的記錄進行轉(zhuǎn)存,在轉(zhuǎn)存記錄是需要注意這兩種數(shù)據(jù)庫的表的數(shù)據(jù)類型要匹配。ACCESS數(shù)據(jù)庫連接成功后,列出MDB表信息到ResTable表中,創(chuàng)建一個DBC文件,選擇ResTable并遍歷游標,生成SQL SELECT的語句字符串,其中包含了ACCESS數(shù)據(jù)表中的內(nèi)容,再通過SQLEXEC將表內(nèi)容發(fā)送至臨時表中,最后將臨時表保存到VFP數(shù)據(jù)庫中。
眾所周知,了解和掌握一個新的軟件需要投入很多的時間和精力,也會遇到很多的困難。本文通過分析比較VFP和ACCESS兩款數(shù)據(jù)庫管理系統(tǒng)的主要功能上的差異,以及兩者之間相互轉(zhuǎn)換的方法,旨在幫助VFP用戶向ACCESS過渡學習時能根據(jù)自身原本VFP知識的掌握情況,可以更輕松的投入到ACCESS的學習中去,盡快的理解和使用一款新的開發(fā)數(shù)據(jù)庫管理系統(tǒng)軟件。
[1] 劉慧.從VF到ACCESS的過渡學習[J].硅谷,2009(21):96.
[2] 傅榮會. 三種關(guān)系型數(shù)據(jù)庫管理系統(tǒng)的比較研究[J]. 重慶三峽學院學報,2011,27(132):58-59.
[3] 劉慧. 對VF用戶如何學好ACCESS的探討[J].硅谷,2009(20):24-26.
[4] 崔再惠. Access數(shù)據(jù)庫與SQL Server數(shù)據(jù)庫主要功能的比較[J]. 鞍山師范學院學報,2009,11(6):51-52.
[5] 李會瓊. 基于Visual FoxPro環(huán)境下Access數(shù)據(jù)庫的操作應用分析[J]. 電腦編程技巧與維護,2013(2):25-26.
[6] 黎升洪.Access數(shù)據(jù)庫應用與VBA編程[M].北京:中國鐵道出版社,2011.
[7] 張小莉. Visual FoxPro程序設計教程[M].北京:科學出版社,2016.
[8] 王永國,張士江,謝倩.基于Visual FoxPro環(huán)境ACCESS數(shù)據(jù)庫操作的實現(xiàn)[J]. 計算機技術(shù)與發(fā)展,2012,21(1):95-99.