999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

在Visual Basic編程中非Access數(shù)據(jù)庫的應(yīng)用

2017-06-29 15:24:44劉建軍
東方教育 2017年8期
關(guān)鍵詞:數(shù)據(jù)庫

劉建軍

摘要:Visual Basic有著強(qiáng)大的數(shù)據(jù)庫存取能力,不僅能夠直接支持Ms Access數(shù)據(jù)庫,而且通過其內(nèi)部安裝的ISAM驅(qū)動(dòng)程序使它能間接支持FoxPro、dBASE等外來數(shù)據(jù)庫。本文不僅從VB數(shù)據(jù)庫體系結(jié)構(gòu)的角度探討了VB對(duì)這些外來數(shù)據(jù)庫的支持,還結(jié)合了一些實(shí)例具體闡述了使用數(shù)據(jù)庫存取對(duì)象變量的方法實(shí)現(xiàn)這些外來數(shù)據(jù)庫的新建、庫結(jié)構(gòu)修改、顯示及其運(yùn)行環(huán)境設(shè)置。

關(guān)鍵詞:Visual Basic Access;外來數(shù)據(jù)庫;數(shù)據(jù)庫

Visual Basic專業(yè)版提供了對(duì)數(shù)據(jù)庫應(yīng)用的強(qiáng)大支持。尤其提供了使用數(shù)據(jù)控件和綁定控制項(xiàng),使用數(shù)據(jù)庫存取對(duì)象變量(Data Access Object Variable),直接調(diào)用ODBC 2.0 API接口函數(shù)等三種訪問數(shù)據(jù)庫的方法。對(duì)其標(biāo)準(zhǔn)內(nèi)置的Ms Access數(shù)據(jù)庫,它可以提供不弱于專業(yè)數(shù)據(jù)庫軟件的支持,可以進(jìn)行完整的數(shù)據(jù)庫維護(hù)、操作及其事務(wù)處理。在VB中,將非Access數(shù)據(jù)庫稱為外來數(shù)據(jù)庫。對(duì)于FoxPro、dBASE、Paradox等外來數(shù)據(jù)庫,雖然借助VB的Data Manager 能夠?qū)@些數(shù)據(jù)庫進(jìn)行NEW、OPEN、DESIGN、DELETE等操作,但在應(yīng)用程序的運(yùn)行狀態(tài)中并不能從底層真正實(shí)現(xiàn)這些功能。本文從使用數(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ù)庫引擎,JET引擎的作用就像是一塊"面 板",在其上可以插入多種ISAM(Indexed Sequential Access Method,即索引順序存取方 法) 數(shù)據(jù)驅(qū)動(dòng)程序。JET引擎為Access格式數(shù)據(jù)庫提供了直接的內(nèi)部(build-in)支持,這就是VB對(duì)Access數(shù)據(jù)庫具有豐富支持的真正原因。VB專業(yè)版中提供了FoxPro、dBASE(或 Xbase)、Paradox、Btrieve等數(shù)據(jù)庫的ISAM驅(qū)動(dòng)程序,這就使得VB能支持這些數(shù)據(jù)庫格式,因而從理論上說,VB能支持所有兼容ISAM的數(shù)據(jù)庫格式(前提是只需獲得這些數(shù)據(jù)庫的ISAM驅(qū)動(dòng)接口程序)。由上可見,Ms JET引擎實(shí)質(zhì)上提供了:一個(gè)符合ANSI標(biāo)準(zhǔn)的語法分析器;為查詢結(jié)果集的使用而提供的內(nèi)存管理功能;同所支持的數(shù)據(jù)庫的外部接口;為應(yīng)用代碼提供的內(nèi)部接口。實(shí)際上,在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引擎來操縱。

從VB的程序代碼的角度來看,ODBC,ISAM驅(qū)動(dòng)程序以及Ms Access數(shù)據(jù)庫的整個(gè)外部結(jié)構(gòu)夠可以統(tǒng)一為一個(gè)一致的編程接口。也即是說,提供給VB應(yīng)用程序員的記錄集對(duì)象視圖同所使用的數(shù)據(jù)庫格式及類型是相互獨(dú)立的。即對(duì)FoxPro等數(shù)據(jù)庫仍然可以使用眾多的數(shù)據(jù)庫存取對(duì)象變量,這就為非Access數(shù)據(jù)庫的訪問提供了最重要的方法。

二、使用非Access數(shù)據(jù)庫時(shí)的參數(shù)設(shè)置及配置文件的參數(shù)讀取如果在VB的程序中使用了數(shù)據(jù)庫的操作,將應(yīng)用程序生成EXE文件或打包生成安裝程序后,則必須提供一個(gè)配置(.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ù)在Kernel.exe動(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)用程序的配置文件為MyDB.INI,則具體過程如下: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 = OSGetPrivate ProfileString(Fname$,szItem$ , szDefault$,Tmp,Len(Tmp) ,"MyDB.INI " ) GetINIString = Mid$( Tmp,1,x ) EndFunction

三、數(shù)據(jù)存取對(duì)象變量對(duì)外來數(shù)據(jù)庫編程的方法及其實(shí)例在VB專業(yè)版數(shù)據(jù)庫編程的三種方法中,第二種-使用數(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中的記錄集對(duì)象與所使用的數(shù)據(jù)庫格式及類型是相互獨(dú)立的,所以在非Access數(shù)據(jù)庫中也可以使用數(shù)據(jù)庫存取對(duì)象變量的方法。因而 對(duì)FoxPro等外來數(shù)據(jù)庫而言,使用數(shù)據(jù)庫存取對(duì)象變量的方法同樣也是一種最佳的選擇。有一點(diǎn)需要注意的是,VB的標(biāo)準(zhǔn)版中僅能使用數(shù)據(jù)控件(Data Control)對(duì)數(shù)據(jù)庫中的記錄進(jìn)行訪問,主要的數(shù)據(jù)庫存取對(duì)象中也僅有Database、Dynaset對(duì)象可通過數(shù)據(jù)控件的屬 性提供,其它的重要對(duì)象如TableDef、Field、Index、QueryDef、Snapshot、Table等均不能在VB的標(biāo)準(zhǔn)版中生成,所以使用數(shù)據(jù)存取對(duì)象變量的方法只能用VB 3.0以上的專業(yè)版。非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>

Sub CreateNew ( ) Dim Db1 As database , Td As TableDefs Dim T1 As New Tabledef , F1 As New Field,F(xiàn)2 As New Field , F3 As New Field Dim Ix1 As New Index Dim Path As String Const DB_TEXT = 10 , DB_INTEGER = 3 ChDir "\" Path$ = InputBox( " 請(qǐng)輸入新路徑名: ", "輸入對(duì)話框" ) MkDir Path$ ' 新建一個(gè)子目錄Set Db1 = OpenDatabase(Path$, True, False, "FoxPro 2.5;") Set Td = Db1.TableDefs T1.Name ="MyDB" '新建一個(gè)數(shù)據(jù)表,數(shù)據(jù)表名為MyDB F1.Name = "Name",F(xiàn)1.Type = DB_TEXT,F(xiàn)1.Size = 20 F2.Name = "Class",F(xiàn)2.Type = DB_TEXT, F2.Size = 20 F3.Name = "Grade",F(xiàn)3.Type = DB_INTEGER T1.Fields.Append F1 '向數(shù)據(jù)表中添加這些字段T1.Fields.Append F2。

猜你喜歡
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
兩種新的非確定數(shù)據(jù)庫上的Top-K查詢
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
主站蜘蛛池模板: 99热亚洲精品6码| 日韩av在线直播| 欧美第九页| 18禁影院亚洲专区| 国产精品午夜电影| 欧美中出一区二区| 亚洲中久无码永久在线观看软件| 亚洲三级影院| av在线人妻熟妇| 亚洲AⅤ无码日韩AV无码网站| a欧美在线| 4虎影视国产在线观看精品| 直接黄91麻豆网站| 国模在线视频一区二区三区| 色网站在线免费观看| 国产欧美日韩综合一区在线播放| 亚洲性色永久网址| 在线观看视频一区二区| 亚洲欧洲自拍拍偷午夜色| 成人免费午夜视频| 国产人前露出系列视频| 97se亚洲综合不卡| 亚洲熟妇AV日韩熟妇在线| 欧美激情,国产精品| 亚洲无码91视频| 她的性爱视频| 欧美三级不卡在线观看视频| 操美女免费网站| 亚洲国产成人麻豆精品| 国产一区二区三区夜色| 99热这里只有免费国产精品| 欧美日本在线播放| 国产主播一区二区三区| 亚洲精品卡2卡3卡4卡5卡区| 国产精品99在线观看| 欧美a√在线| 亚洲av无码牛牛影视在线二区| 国产久操视频| 婷婷六月天激情| 99ri精品视频在线观看播放 | 强奷白丝美女在线观看| 国产在线日本| 亚洲视频二| 青青操国产视频| 亚洲美女操| 婷婷午夜影院| 99在线免费播放| 色综合日本| 久久精品人人做人人爽97| 谁有在线观看日韩亚洲最新视频| 国产又黄又硬又粗| 欧美精品在线免费| 91麻豆国产视频| 国产91色| 久久精品一卡日本电影| 亚洲人精品亚洲人成在线| 国产色图在线观看| 日韩一级毛一欧美一国产| 久久精品午夜视频| 国产性生大片免费观看性欧美| 国产三级国产精品国产普男人 | 喷潮白浆直流在线播放| 国内精品视频| 中国国产A一级毛片| 欧美在线伊人| 亚洲AV一二三区无码AV蜜桃| 五月激情婷婷综合| 中文字幕啪啪| 日韩精品一区二区深田咏美| a级免费视频| 欧美一级高清片久久99| 日本不卡在线播放| 香蕉国产精品视频| 精品国产美女福到在线直播| 一级毛片免费不卡在线视频| 中文字幕乱码二三区免费| 激情影院内射美女| 色婷婷久久| 欧美一区二区福利视频| 国产高清在线观看| 美女视频黄频a免费高清不卡| 日本午夜在线视频|