在VB中兼容非ACCESS數(shù)據(jù)庫的技巧_Access數(shù)據(jù)庫教程
推薦:給你的數(shù)據(jù)庫文件減肥 在數(shù)據(jù)庫的設(shè)計(jì)過程中經(jīng)常要添加、刪除數(shù)據(jù)庫對(duì)象,這會(huì)使數(shù)據(jù)庫內(nèi)部留有許多碎片,不能有效地利用磁盤空間,文件會(huì)逐漸增大。這有點(diǎn)象文件系統(tǒng)經(jīng)過多次的增刪操作,會(huì)導(dǎo)致文件碎片,浪費(fèi)磁
本文從VB數(shù)據(jù)庫體系結(jié)構(gòu)的角度出發(fā),結(jié)合一個(gè)具體實(shí)例,闡述了在VB中兼容非ACCESS格式數(shù)據(jù)庫的具體方法和技巧。
關(guān)鍵詞:VB、非ACCESS數(shù)據(jù)庫、數(shù)據(jù)存取對(duì)象
一個(gè)完整的數(shù)據(jù)庫管理系統(tǒng)(DBMS)應(yīng)是能兼容市面上各種較流行數(shù)據(jù)格式的系統(tǒng),它充分考慮了不同用戶的實(shí)際要求。鑒于目前市面上有多種數(shù)據(jù)庫格式(如Foxpro、DBase、Paradox等)流行,因而在VB數(shù)據(jù)庫應(yīng)用程序中兼容非ACCESS數(shù)據(jù)庫就顯得尤為重要了。
作為一種流行的開發(fā)平臺(tái),VB提供了強(qiáng)大的數(shù)據(jù)庫功能。主要有以下三種:數(shù)據(jù)控件法:使用數(shù)據(jù)存取對(duì)象(Data Access Object )法;直接調(diào)用ODBC 2.0 API接口函數(shù)法。其中調(diào)用數(shù)據(jù)存取對(duì)象的方法相對(duì)其它兩種方法具有方便靈活、功能強(qiáng)大的突出優(yōu)點(diǎn)。本文即從調(diào)用數(shù)據(jù)庫存取對(duì)象的方法出發(fā),實(shí)現(xiàn)了非ACCESS格式數(shù)據(jù)庫(以FoxPro數(shù)據(jù)庫為例)的建新庫、拷貝數(shù)據(jù)庫結(jié)構(gòu)、動(dòng)態(tài)調(diào)入等操作,闡述了從編程技巧上彌補(bǔ)VB對(duì)這些外來數(shù)據(jù)庫支持不足的可行性。
一、VB數(shù)據(jù)庫的體系結(jié)構(gòu)
VB數(shù)據(jù)庫的核心結(jié)構(gòu)是所謂的MicroSoft JET數(shù)據(jù)庫引擎,它為VB與數(shù)據(jù)庫的接口提供了基本的方法和手段。JET引擎被Visual Basic、Microsoft ACCESS和其它Microsoft產(chǎn)品所共享。因而在VB中Access數(shù)據(jù)庫格式是一種標(biāo)準(zhǔn)的內(nèi)置格式,所有的非ACCESS數(shù)據(jù)庫都被稱為外來數(shù)據(jù)庫。
JET引擎的作用就像是一塊“面板”,在其上可以插入多種索引順序存取方法(即ISAM)數(shù)據(jù)驅(qū)動(dòng)程序。這就是VB對(duì)非ACCESS數(shù)據(jù)庫具有豐富支持的真正原因。VB專業(yè)版中提供了FoxPro、dBASE(或Xbase)、Paradox、Btrieve等數(shù)據(jù)庫的ISAM驅(qū)動(dòng)程序,這就使得VB能支持這些數(shù)據(jù)庫格式。另外,其他的許多兼容ISAM的驅(qū)動(dòng)程序也可以通過從廠商的售后服務(wù)得到。因而從理論上說,VB能支持所有兼容ISAM的數(shù)據(jù)庫格式(前提是只需獲得這些數(shù)據(jù)庫的ISAM驅(qū)動(dòng)接口程序)。
二、使用非ACCESS數(shù)據(jù)庫時(shí)的參數(shù)設(shè)置及配置文件的參數(shù)讀取
值得注意的是,大多數(shù)的程序員都不注重?cái)?shù)據(jù)庫配置文件的使用,殊不知這是極為重要的。
如果在VB的程序中使用了數(shù)據(jù)庫的操作,將應(yīng)用程序生成EXE文件或打包生成安裝程序后,則必須提供一個(gè)數(shù)據(jù)庫配置(.INI)文件,在INI文件中可以對(duì)不同類型的數(shù)據(jù)庫進(jìn)行設(shè)置。如果找不到這個(gè)INI文件,將會(huì)導(dǎo)致不能訪問數(shù)據(jù)庫。通常情況下,INI文件的文件名和應(yīng)用程序的名稱相同,所以如果沒有指明,VB的程序會(huì)在Windows子目錄中去找和應(yīng)用程序同名的INI文件。可以使用VB中的SetDataACCESSOptions語句來設(shè)置INI文件。
SetDataACCESSOptions語句的用法如下:
SetDataACCESSOptions 1,IniFileName
其中IniFileName參數(shù)指明的是INI文件的帶路徑的文件名。
值得注意的是,當(dāng)應(yīng)用程序找不到這個(gè)INI文件時(shí),或在調(diào)用OpenDataBase函數(shù)時(shí)對(duì)其Connect參數(shù)值沒有設(shè)定為VB規(guī)定的標(biāo)準(zhǔn)值,如對(duì)FoxPro 2.5格式設(shè)定為了“FoxPro;”(應(yīng)為“FoxPro 2.5;”),或者沒有安裝相應(yīng)的ISAM驅(qū)動(dòng)程序,則此時(shí)VB會(huì)顯示一條錯(cuò)誤信息“Not Found Installable ISAM”。
通常,INI文件在應(yīng)用程序分發(fā)出去以前已經(jīng)生成,或者在安裝時(shí)動(dòng)態(tài)生成,也可以在應(yīng)用程序中自己生成。通常這種INI文件中有“[Options]”、“[ISAM]”、“[Installed ISAMs]”、“[FoxPro ISAM]”、“[dBASE ISAM]”、“[Paradox ISAM]”等設(shè)置段,對(duì)于一個(gè)完整的應(yīng)用程序則還應(yīng)有一個(gè)屬于應(yīng)用程序自己的設(shè)置段如“[MyDB]”。可在其中設(shè)置DataType、Server、DataBase、OpenOnStartup、DisplaySQL、QueryTimeOut等較為重要的數(shù)據(jù)庫參數(shù),并以此限定應(yīng)用程序一般的運(yùn)行環(huán)境。
Windows API接口函數(shù)在Win95系統(tǒng)提供的動(dòng)態(tài)鏈接庫中提供了一個(gè)OSWritePrivateProfileString函數(shù),此函數(shù)能按Windows下配置文件(.INI)的書寫格式寫入信息。
在通常情況下,應(yīng)用程序還需要在運(yùn)行時(shí)讀取配置文件內(nèi)相關(guān)項(xiàng)的參數(shù)。比如PageTimeOut(頁加鎖超時(shí)時(shí)限)、MaxBufferSize(緩沖區(qū)大小)、LockRetry(加鎖失敗時(shí)重試次數(shù))等參數(shù),通過對(duì)這些參數(shù)的讀取對(duì)應(yīng)用程序運(yùn)行環(huán)境的設(shè)定、潛在錯(cuò)誤的捕獲等均會(huì)有很大的改善。
設(shè)此應(yīng)用程序的數(shù)據(jù)庫配置文件為MyDB.INI,則具體過程如下:
| 以下為引用的內(nèi)容: Funtion GetINIString$( Byval Fname$,Byval szItem$,Byval szDeFault$ ) ’此自定義子函數(shù)實(shí)現(xiàn)INI文件內(nèi)設(shè)置段內(nèi)參數(shù)的讀取 Dim Tmp As String, x As Integer Tmp = String( 2048,32 ) x = OSGetPrivateProfileString( Fname$,szItem$,szDefault$,Tmp,Len(Tmp),“MyDB.INI”) GetINIString = Mid$( Tmp,1,x ) End Function |
通過此函數(shù)就能實(shí)現(xiàn)對(duì)各種數(shù)據(jù)庫格式的讀取。
三、調(diào)用數(shù)據(jù)存取對(duì)象對(duì)非ACCESS數(shù)據(jù)庫編程的方法及其實(shí)例
VB專業(yè)版中使用數(shù)據(jù)庫存取對(duì)象變量(DAO)的方法最具有功能強(qiáng)大、編程靈活的特點(diǎn)。它能夠在程序中存取ODBC 2.0的管理函數(shù);可以控制多種記錄集類型:Dynaset,Snapshot及Table記錄集合對(duì)象;可以存儲(chǔ)過程和查詢動(dòng)作;可以存取數(shù)據(jù)庫集合對(duì)象,例如TableDefs,F(xiàn)ields,Indexes及QueryDefs;具有真正的事物處理能力。這種方法對(duì)數(shù)據(jù)庫處理的大多數(shù)情況都非常適用。
從VB的程序代碼的角度來看,提供給VB程序員的記錄集對(duì)象(RecordSet)同所使用的數(shù)據(jù)庫格式及類型是相互獨(dú)立的。即對(duì)FoxPro等數(shù)據(jù)庫仍然可以使用眾多的數(shù)據(jù)庫存取對(duì)象變量,這就為非ACCESS數(shù)據(jù)庫的訪問提供了最重要的前提和方法。
在VB中從一種數(shù)據(jù)庫類型轉(zhuǎn)化為另一種數(shù)據(jù)庫類型幾乎不需要或只需要很少的代碼修改。而且,盡管dBASE、Paradox本身的DDL(Data Definition Language,即數(shù)據(jù)定義語言)和DML(Data Manipulation Language,即數(shù)據(jù)操縱語言)是非結(jié)構(gòu)化查詢的,但它們?nèi)匀豢梢允褂肰B的SQL語句和JET引擎來操縱。
因而對(duì)FoxPro等非ACCESS數(shù)據(jù)庫而言,調(diào)用數(shù)據(jù)庫存取對(duì)象的方法同樣也是一種最佳的選擇。
(一)非ACCESS數(shù)據(jù)庫的新建及庫結(jié)構(gòu)的修改
VB專業(yè)版中的數(shù)據(jù)庫存取對(duì)象變量可以分為兩類,一類用于數(shù)據(jù)庫結(jié)構(gòu)的維護(hù)和管理,另一類用于數(shù)據(jù)的存取。其中表示數(shù)據(jù)庫結(jié)構(gòu)時(shí)可以使用下面的對(duì)象:DataBase、TableDef、Field、Index,以及三個(gè)集合(Collection):TableDefs、Fields和Indexes。每一個(gè)集合都是由若干個(gè)對(duì)象組成的,這些數(shù)據(jù)對(duì)象的集合可以完全看作是一個(gè)數(shù)組,并按數(shù)組的方法來調(diào)用。
一旦數(shù)據(jù)庫對(duì)象建立后,就可以用它對(duì)數(shù)據(jù)庫的結(jié)構(gòu)進(jìn)行修改和數(shù)據(jù)處理。
對(duì)于非ACCESS數(shù)據(jù)庫,大部分都是對(duì)應(yīng)于一個(gè)目錄,所以可以使用VB的MkDir語句先生成一個(gè)目錄,亦即新建一個(gè)數(shù)據(jù)庫。而每一個(gè)非ACCESS數(shù)據(jù)庫文件可看作是此目錄下的一個(gè)數(shù)據(jù)表(Table),但實(shí)際上它們是互相獨(dú)立的。
下面是新建一個(gè)FoxPro 2.5格式數(shù)據(jù)庫的程序?qū)嵗?/p>
| 以下為引用的內(nèi)容: Sub CreateNew ( ) |
在此段程序中值得注意的是,對(duì)非Access數(shù)據(jù)庫的新建不用CreateDatabase函數(shù),而是用OpenDatabase函數(shù),這點(diǎn)與Access數(shù)據(jù)庫大不一樣,但也僅僅是針對(duì)非ACCESS數(shù)據(jù)庫而言才能用OpenDatabase函數(shù)來新建一個(gè)數(shù)據(jù)庫對(duì)象。
在VB中,外來數(shù)據(jù)庫的不同格式只在OpenDatabase函數(shù)的最后一個(gè)參數(shù)Connect中有所體現(xiàn),不同格式的外來數(shù)據(jù)庫其Connect參數(shù)值也不同,除此以外,在VB專業(yè)版中其編程的方法和步驟及技巧是基本相同的。
新建子目錄后,不能用ChDir語句進(jìn)入它,否則會(huì)出現(xiàn)“‘MyDB’ is not a valid path”的錯(cuò)誤。同時(shí),對(duì)F1、F2、F3等新建字段對(duì)象的定義也必須分別定義,否則會(huì)出現(xiàn)“Element not defined”(變量未定義)的錯(cuò)誤。
通過一定的編程技巧還可以實(shí)現(xiàn)非ACCESS數(shù)據(jù)庫的庫結(jié)構(gòu)的拷貝,下面是一段相應(yīng)的程序。
Function GetPos( TFname$ ) ’此自定義函數(shù)完成對(duì)帶路徑文件名中最后一個(gè)“\”符號(hào)的定位
| 以下為引用的內(nèi)容: Dim I As Integer,Tmp As String |
可見,拷貝庫結(jié)構(gòu)的方法在于把一個(gè)已存在的數(shù)據(jù)庫拷貝到一個(gè)新文件中,然后再刪除新文件內(nèi)的所有記錄,保留其庫結(jié)構(gòu),得到的就是一個(gè)新建的庫結(jié)構(gòu)完整的空庫。
(二)非ACCESS數(shù)據(jù)庫的動(dòng)態(tài)調(diào)入
在實(shí)際應(yīng)用的很多情況下,經(jīng)常需要在對(duì)一些事先并不知道其具體庫結(jié)構(gòu)的數(shù)據(jù)庫進(jìn)行調(diào)入、顯示及打印其記錄。因而實(shí)現(xiàn)未知格式數(shù)據(jù)庫的動(dòng)態(tài)調(diào)入也是評(píng)價(jià)VB數(shù)據(jù)庫應(yīng)用程序兼容性的一個(gè)重要標(biāo)志。
在VB中,網(wǎng)格控件非常適合用于瀏覽數(shù)據(jù)庫中的數(shù)據(jù),只需把數(shù)據(jù)放入網(wǎng)格即可。
在使用網(wǎng)格時(shí)動(dòng)態(tài)調(diào)入的關(guān)鍵在于記錄(Colume)內(nèi)容和字段(Row)內(nèi)容(包括字段的名稱、類型、值等)的讀取,因而生成一個(gè)可以對(duì)應(yīng)于一個(gè)或多個(gè)數(shù)據(jù)表中的全部或部分記錄的Dynaset對(duì)象是非常必要的。Dynaset對(duì)象還可以是一個(gè)動(dòng)態(tài)查詢的結(jié)果,能進(jìn)行記錄的增加、刪除和修改等操作。
下面是一段用網(wǎng)格顯示FoxPro數(shù)據(jù)庫的程序。
| 以下為引用的內(nèi)容: Sub DBLoad( ) |
最后應(yīng)記住,在VB的數(shù)據(jù)庫應(yīng)用程序運(yùn)行之前,一定要在AUTOEXEC.BAT文件中加入一句SHARE.EXE /L:500。
以上所有程序均在Pentium/166機(jī)、中文Windows95下用VB4調(diào)試通過。
四、結(jié)束語
對(duì)非Access數(shù)據(jù)庫的兼容是VB數(shù)據(jù)庫編程中不可分割的重要部分。因而熟練掌握使用DAO方法對(duì)非ACCESS數(shù)據(jù)庫的編程是極為重要的。并且,一定編程技巧的應(yīng)用也有助于彌補(bǔ)VB對(duì)外來數(shù)據(jù)庫支持的不足。
分享:ACCESS默認(rèn)保存路徑的修改方法1、Microsoft ACCESS文件默認(rèn)保存路徑修改方法 Access默認(rèn)保存路徑也是C:My Documents目錄。默認(rèn)保存路徑修改方法:打開ACCESS程序,單擊菜單欄“工具”下的“選項(xiàng)”命
- Access數(shù)據(jù)庫安全策略之ASP式
- 第N次被ACCESS的關(guān)鍵字涮
- Access中用Jet SQL語句刪除表關(guān)系
- Access報(bào)表打印如何自動(dòng)分頁
- Access完成累計(jì)余額的計(jì)算
- 搭建Access為主的Mdb數(shù)據(jù)庫
- 一句sql更新兩個(gè)表并可更新對(duì)應(yīng)的字段值具體實(shí)現(xiàn)
- MySQL查詢優(yōu)化:連接查詢排序limit(join、order by、limit語句)介紹
- 內(nèi)網(wǎng)ssh/mysql登錄緩慢的解決方法
- 使用準(zhǔn)則進(jìn)行條件查詢--1.4.從窗體中選擇查詢的條件
- 中文Access2000速成教程--1.1 使用“向?qū)А痹O(shè)計(jì)數(shù)據(jù)庫
- 中文Access2000速成教程--1.3 在“設(shè)計(jì)”視圖中設(shè)計(jì)表
Access數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Access數(shù)據(jù)庫教程推薦
- 解讀access中數(shù)據(jù)表的自動(dòng)重新聯(lián)接
- ASP完美轉(zhuǎn)化ACCESS為SQL數(shù)據(jù)庫連接
- 用Access數(shù)據(jù)庫壓縮文件
- 長期使用中型Access數(shù)據(jù)庫的一點(diǎn)經(jīng)驗(yàn)
- 用Access設(shè)計(jì)客觀試卷(1)
- 解決SQL Server轉(zhuǎn)ACCESS自動(dòng)編號(hào)問題
- 用DAO或ADO正確訪問Access 2000
- Access字符串處理函數(shù)整理
- 如何判斷一個(gè)字段是否在表中
- 在VB中動(dòng)態(tài)創(chuàng)建數(shù)據(jù)庫
猜你也喜歡看這些
- 相關(guān)鏈接:
- 教程說明:
Access數(shù)據(jù)庫教程-在VB中兼容非ACCESS數(shù)據(jù)庫的技巧
。