非Access數據庫在VB中的編程及應用_第1頁
非Access數據庫在VB中的編程及應用_第2頁
非Access數據庫在VB中的編程及應用_第3頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

非Access數據庫在VB中的編程及應用

VisualBasic有著強大的數據庫存取能力,不僅能夠直接支持MsAccess數據庫,而且通過其內部安裝的ISAM驅動程序使它能間接支持FoxPro、dBASE等外來數據庫。本文不僅從VB數據庫體系結構的角度探討了VB對這些外來數據庫的支持,還結合了一些實例具體闡述了使用數據庫存取對象變量的方法實現這些外來數據庫的新建、庫結構修改、顯示及其運行環(huán)境設置。關鍵詞VisualBasicAccess,外來數據庫,數據庫正文存取對象變量庫結構作為一個功能較完備的Windows軟件開發(fā)平臺,VisualBasic專業(yè)版提供了對數據庫應用的強大支持。尤其提供了使用數據控件和綁定控制項,使用數據庫存取對象變量(DataAccessObjectVariable),直接調用ODBC2.0API接口函數等三種訪問數據庫的方法。對其標準內置的MsAccess數據庫,它可以提供不弱于專業(yè)數據庫軟件的支持,可以進行完整的數據庫維護、操作及其事務處理。在VB中,將非Access數據庫稱為外來數據庫。對于FoxPro、dBASE、Paradox等外來數據庫。雖然借助VB的DataManager能夠對這些數據庫進行NEW、OPEN、DESIGN、DELETE等操作,但在應用程序的運行狀態(tài)中并不能從底層真正實現這些功能。本文從使用數據庫存取對象變量的方法出發(fā),實現了非Access格式數據庫(以FoxPro數據庫為例)的建新庫、拷貝數據庫結構、動態(tài)調入等操作,闡述了從編程技巧上彌補VB對這些外來數據庫支持不足的可行性。一、VB數據庫的體系結構具體的VB的數據庫結構。VB數據庫的核心結構是所謂的MicroSoftJET數據庫引擎,JET引擎的作用就像是一塊"面板",在其上可以插入多種ISAM(IndexedSequentialAccessMethod,即索引順序存取方法)數據驅動程序。JET引擎為Access格式數據庫提供了直接的內部(build-in)支持,這就是VB對Access數據庫具有豐富支持的真正原因。VB專業(yè)版中提供了FoxPro、dBASE(或Xbase)、Paradox、Btrieve等數據庫的ISAM驅動程序,這就使得VB能支持這些數據庫格式。另外,其他的許多兼容ISAM的驅動程序也可以通過從廠商的售后服務得到。因而從理論上說,VB能支持所有兼容ISAM的數據庫格式(前提是只需獲得這些數據庫的ISAM驅動接口程序)。由上可見,MsJET引擎實質上提供了:一個符合ANSI標準的語法分析器;為查詢結果集的使用而提供的內存管理功能;同所支持的數據庫的外部接口;為應用代碼提供的內部接口。實際上,在VB中從一種數據庫類型轉化為另一種數據庫類型幾乎不需要或只需要很少的代碼修改。而且,盡管dBASE、Paradox本身的DDL(DataDefinitionLanguage,即數據定義語言)和DML(DataManipulationLanguage,即數據操縱語言)是非結構化查詢的,但它們仍然可以使用VB的SQL語句和JET引擎來操縱。從VB的程序代碼的角度來看,ODBC,ISAM驅動程序以及MsAccess數據庫的整個外部結構夠可以統(tǒng)一為一個一致的編程接口。也即是說,提供給VB應用程序員的記錄集對象視圖同所使用的數據庫格式及類型是相互獨立的。即對FoxPro等數據庫仍然可以使用眾多的數據庫存取對象變量,這就為非Access數據庫的訪問提供了最重要的方法。二、使用非Access數據庫時的參數設置及配置文件的參數讀取如果在VB的程序中使用了數據庫的操作,將應用程序生成EXE文件或打包生成安裝程序后,則必須提供一個配置(.INI)文件,在INI文件中可以對不同類型的數據庫進行設置。如果找不到這個INI文件,將會導致不能訪問數據庫。通常情況下,INI文件的文件名和應用程序的名稱相同,所以如果沒有指明,VB的程序會在Windows子目錄中去找和應用程序同名的INI文件??梢允褂肰B中的SetDataAccessOptions語句來設置INI文件。SetDataAccessOptions語句的用法如下:SetDataAccessOptions1,IniFileName其中IniFileName參數指明的是INI文件的帶路徑的文件名。值得注意的是,當應用程序找不到這個INI文件時,或在調用OpenDataBase函數時對其Connect參數值沒有設定為VB規(guī)定的標準值,如對FoxPro2.5格式設定為了"FoxPro;"(應為"FoxPro2.5;"),或者沒有安裝相應的ISAM驅動程序,則此時VB會顯示一條錯誤信息"NotFoundInstallableISAM"。通常,INI文件在應用程序分發(fā)出去以前已經生成,或者在安裝時動態(tài)生成,也可以在應用程序中自己生成。通常這種INI文件中有"[Options]"、"[ISAM]"、"[InstalledISAMs]"、"[FoxProISAM]"、"[dBASEISAM]"、"[ParadoxISAM]"等設置段,對于一個完整的應用程序則還應有一個屬于應用程序自己的設置段如"[MyDB]”??稍谄渲性O置DataType、Server、DataBase、OpenOnStartup、DisplaySQL、QueryTimeOut等較為重要的數據庫參數,并以此限定應用程序一般的運行環(huán)境。WindowsAPI接口函數在Kernel.exe動態(tài)鏈接庫中提供了一個OSWritePrivateProfileString函數,此函數能按Windows下配置文件(.INI)的書寫格式寫入信息。在通常情況下,應用程序還需要在運行時讀取配置文件內相關項的參數。比如PageTimeOut(頁加鎖超時時限)、MaxBufferSize(緩沖區(qū)大?。?、LockRetry(加鎖失敗時重試次數)等參數,通過對這些參數的讀取對應用程序運行環(huán)境的設定、潛在錯誤的捕獲等均會有很大的改善。設此應用程序的配置文件為MyDB.INI,則具體過程如下:FuntionGetINIString$(ByvalFname$,ByvalszItem$,ByvalszDeFault$)'此自定義子函數實現INI文件內設置段內參數的讀取DimTmpAsString,xAsIntegerTmp=String(2048,32)x=OSGetPrivateProfileString(Fname$,szItem$,szDefault$,Tmp,Len(Tmp),"MyDB.INI")GetINIString=Mid$(Tmp,1,x)EndFunction以下這些函數的聲明可寫在模塊文件內,且每個函數的聲明必須在一行內DeclareFunctionOSGetPrivateProfileString%Lib"Kernel"Alias"GetPrivateProfileString"(ByValAppName$,ByValKeyName$,ByValkeydefault$,ByValReturnString$,ByValNumBytesAsInteger,ByValFileName$)DeclareFunctionOSWritePrivateProfileString%Lib"Kernel"Alias"WritePrivateProfileString"(ByValAppName$,ByValKeyName$,ByValkeydefault$,ByValFileName$)DeclareFunctionOSGetWindowsDirectory%Lib"Kernel"Alias"GetWindowsDirectory"(ByVala$,ByValb%)SubForm1_Load()DimstAsStringDimxAsIntegerDimtmpAsStringtmp=String$(255,32)'INI文件內為各種數據庫格式指明已安裝的相應ISAM驅動程序x=OSWritePrivateProfileString("InstallableISAMS","Paradox3.X","PDX110.DLL","MyDB.INI")x=OSWritePrivateProfileString("InstallableISAMS","dBASEIII","XBS110.DLL","MyDB.INI")x=OSWritePrivateProfileString("InstallableISAMS","dBASEIV","XBS110.DLL","MyDB.INI")x=OSWritePrivateProfileString("InstallableISAMS","FoxPro2.0","XBS110.DLL","MyDB.INI")x=OSWritePrivateProfileString("InstallableISAMS","FoxPro2.5","XBS110.DLL","MyDB.INI")x=OSWritePrivateProfileString("InstallableISAMS","Btrieve","BTRV110.DLL","MyDB.INI")x=OSWritePrivateProfileString("dBaseISAM","Deleted","On","MyDB.INI")'指明INI文件的位置x=OSGetWindowsDirectory(tmp,255)st=Mid$(tmp,1,x)SetDataAccessOption1,st+"\mydb.ini"'獲得INI文件一些參數gwMaxGridRows=Val(GetINIString("MyDB.INI","MaxRows","250"))glQueryTimeout=Val(GetINIString("MyDB.INI","QueryTimeout","5"))glLoginTimeout=Val(GetINIString("MyDB.INI","LoginTimeout","20"))EndSub三、數據存取對象變量對外來數據庫編程的方法及其實例在VB專業(yè)版數據庫編程的三種方法中,第二種-使用數據庫存取對象變量(DAO)的方法最具有功能強大、靈活的特點。它能夠在程序中存取ODBC2.0的管理函數;可以控制多種記錄集類型:Dynaset,Snapshot及Table記錄集合對象;可以存儲過程和查詢動作;可以存取數據庫集合對象,例如TableDefs,Fields,Indexes及QueryDefs;具有真正的事物處理能力。因而,這種方法對數據庫處理的大多數情況都非常適用。由于VB中的記錄集對象與所使用的數據庫格式及類型是相互獨立的,所以在非Access數據庫中也可以使用數據庫存取對象變量的方法。因而對FoxPro等外來數據庫而言,使用數據庫存取對象變量的方法同樣也是一種最佳的選擇。有一點需要注意的是,VB的標準版中僅能使用數據控件(DataControl)對數據庫中的記錄進行訪問,主要的數據庫存取對象中也僅有Database、Dynaset對象可通過數據控件的屬性提供,其它的重要對象如TableDef、Field、Index、QueryDef、Snapshot、Table等均不能在VB的標準版中生成,所以使用數據存取對象變量的方法只能用VB3.0以上的專業(yè)版。(一)、非Access數據庫的新建及庫結構的修改VB專業(yè)版中的數據庫存取對象變量可以分為兩類,一類用于數據庫結構的維護和管理,另一類用于數據的存取。其中表示數據庫結構時可以使用下面的對象:DataBase、TableDef、Field、Index,以及三個集合(Collection):TableDefs、Fields和Indexes。每一個集合都是由若干個對象組成的,這些數據對象的集合可以完全看作是一個數組,并按數組的方法來調用。一旦數據庫對象建立后,就可以用它對數據庫的結構進行修改和數據處理。對于非Access數據庫,大部分都是對應于一個目錄,所以可以使用VB的MkDir語句先生成一個目錄,亦即新建一個數據庫。而每一個非Access數據庫文件可看作是此目錄下的一個數據表(Table),但實際上它們是互相獨立的。下面是新建一個FoxPro2.5格式數

溫馨提示

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

評論

0/150

提交評論