一、VB數據庫的體系結構具體的VB的數據庫結構。
VB數據庫的核心結構是所謂的MicroSoft JET數據庫引擎,JET引擎的作用就像是一塊"面板",在其上可以插入多種ISAM(Indexed Sequential Access Method,即索引順序存取方 法) 數據驅動程序。
JET引擎為Access格式數據庫提供了直接的內部(build-in)支持,這就是VB對Access數據庫具有豐富支持的真正原因。
VB專業版中提供了FoxPro、DBase(或 Xbase)、Paradox、BtrIEve等數據庫的ISAM驅動程序,這就使得VB能支持這些數據庫格 式。另外,其他的許多兼容ISAM的驅動程序也可以通過從廠商的售後服務得到。因而從理論上說,VB能支持所有兼容ISAM的數據庫格式(前提是只需獲得這些數據庫的ISAM驅動接口程序)。
由上可見,Ms JET引擎實質上提供了:一個符合ANSI標准的語法分析器;為查詢結果集的使用而提供的內存管理功能;同所支持的數據庫的外部接口;為應用代碼提供的內部接口。實際上,在VB中從一種數據庫類型轉化為另一種數據庫類型幾乎不需要或只需要很少的代碼修改。而且,盡管DBase、Paradox本身的DDL (Data Definition Language,即數據定義語言)和DML(Data Manipulation Language,即數據操縱語言)是非結構化查詢的,但它們仍然可以使用VB的SQL語句和JET引擎來操縱。
從VB的程序代碼的角度來看,ODBC,ISAM驅動程序以及Ms Access數據庫的整個外部結構夠可以統一為一個一致的編程接口。也即是說,提供給VB應用程序員的記錄集對象視圖同所使用的數據庫格式及類型是相互獨立的。即對FoxPro等數據庫仍然可以使用眾多的數據庫存取對象變量,這就為非Access數據庫的訪問提供了最重要的方法。
二 、使用非Access數據庫時的參數設置及配置文件的參數讀取如果在VB的程序中使用了數據庫的操作,將應用程序生成EXE文件或打包生成安裝程序後,則必須提供一個配置 (.INI)文件,在INI文件中可以對不同類型的數據庫進行設置。如果找不到這個INI文件, 將會導致不能訪問數據庫。通常情況下,INI文件的文件名和應用程序的名稱相同,所以如果沒有指明,VB的程序會在Windows子目錄中去找和應用程序同名的INI文件。可以使用VB中的SetDataAccessOptions語句來設置INI文件。
SetDataAccessOptions語句的用法如下:SetDataAccessOptions 1 ,IniFileName其中IniFileName參數指明的是INI文件的帶路徑的文件名。值得注意的是,當應用程序找不到這個INI文件時,或在調用 OpenDataBase函數時對其Connect參數值沒有設定為VB規定的標准值,如對FoxPro 2.5格式設定為了" FoxPro;"(應為" FoxPro 2.5; "),或者沒有安裝相應的ISAM驅動程序,則此時VB會顯示一條錯誤信息" Not Found Installable ISAM "。通常,INI文件在應用程序分發出去以前已經生成,或者在安裝時動態生成,也可以在應用程序中自己生成。 通常這種 INI文件中有" [Options]"、"[ISAM]"、" [Installed ISAMs]"、"[FoxPro ISAM]"、"[DBase ISAM] " 、" [Paradox ISAM] "等設置段,對於一個完整的應用程序則還應有一個屬於應用 程序自己的設置段如" [MyDB]”。可在其中設置DataType、Server、DataBase、 OpenOnStartup、DisplaySQL、QueryTimeOut等較為重要的數據庫參數,並以此限定應用程序一般的運行環境。 Windows API接口函數在Kernel.exe動態鏈接庫中提供了一個OSWritePrivateProfileString函數,此函數能按Windows下配置文件(.INI)的書寫格式寫入信息。
在通常情況下,應用程序還需要在運行時讀取配置文件內相關項的參數。比如PageTimeOut(頁加鎖超時時限)、MaxBufferSize(緩沖區大小)、LockRetry(加鎖失敗時重試次數)等參數,通過對這些參數的讀取對應用程序運行環境的設定、潛在錯誤的捕獲等均會有很大的改善。
三 、數據存取對象變量對外來數據庫編程的方法及其實例在VB專業版數據庫編程的三種方法中,第二種-使用數據庫存取對象變量(DAO)的方法最具有功能強大、靈活的特點。 它能夠在程序中存取ODBC 2.0的管理函數;可以控制多種記錄集類型:Dynaset,Snapshot 及Table記錄集合對象;可以存儲過程和查詢動作;可以存取數據庫集合對象,例如 TableDefs,FIElds,Indexes及QueryDefs;具有真正的事物處理能力。因而,這種方法對數據庫處理的大多數情況都非常適用。
由於VB中的記錄集對象與所使用的數據庫格式及類型是相互獨立的,所以在非Access數據庫中也可以使用數據庫存取對象變量的方法。因而 對FoxPro等外來數據庫而言,使用數據庫存取對象變量的方法同樣也是一種最佳的選擇。 有一點需要注意的是,VB的標准版中僅能使用數據控件(Data Control)對數據庫中的記錄進行訪問,主要的數據庫存取對象中也僅有Database、Dynaset對象可通過數據控件的屬 性提供,其它的重要對象如TableDef、FIEld、Index、QueryDef、Snapshot、Table等均不能在VB的標准版中生成,所以使用數據存取對象變量的方法只能用VB 3.0以上的專業版。