使用非access數(shù)據(jù)庫時(shí)的參數(shù)設(shè)置及配置文件的參數(shù)讀取
如果在vb的程序中使用了數(shù)據(jù)庫的操作,將應(yīng)用程序生成exe文件或打包生成安裝程序后,則必須提供一個(gè)配置(.ini)文件,在ini文件中可以對不同類型的數(shù)據(jù)庫進(jìn)行設(shè)置。如果找不到這個(gè)ini文件,將會(huì)導(dǎo)致不能訪問數(shù)據(jù)庫。通常情況下,ini文件的文件名和應(yīng)用程序的名稱相同,所以如果沒有指明,vb的程序會(huì)在windows子目錄中去找和應(yīng)用程序同名的ini文件?梢允褂胿b中的setdataaccessoptions語句來設(shè)置ini文件。
setdataaccessoptions語句的用法如下:
setdataaccessoptions1,inifilename
其中inifilename參數(shù)指明的是ini文件的帶路徑的文件名。設(shè)為首頁值得注意的是,當(dāng)應(yīng)用程序找不到這個(gè)ini文件時(shí),或在調(diào)用opendatabase函數(shù)時(shí)對其connect參數(shù)值沒有設(shè)定為vb規(guī)定的標(biāo)準(zhǔn)值,如對foxpro2.5格式設(shè)定為了“foxpro;”(應(yīng)為“foxpro2.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è)置段,對于一個(gè)完整的應(yīng)用程序則還應(yīng)有一個(gè)屬于應(yīng)用程序自己的設(shè)置段如“[mydb]”?稍谄渲性O(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ù),通過對這些參數(shù)的讀取對應(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 = osgetprivateprofilestring( fname$ , szitem$ , szdefault$ , tmp , len(tmp) , “ mydb.ini ” )
getinistring = mid$( tmp,1,x )
end function
以下這些函數(shù)的聲明可寫在模塊文件內(nèi),且每個(gè)函數(shù)的聲明必須在一行內(nèi)
declare function osgetprivateprofilestring% lib "kernel" alias "getprivateprofilestring" (byval appname$, byval keyname$, byval keydefault$, byval returnstring$, byval numbytes as integer, byval filename$)
declare function oswriteprivateprofilestring% lib "kernel" alias "writeprivateprofilestring" (byval appname$, byval keyname$, byval keydefault$, byval filename$)
declare function osgetwindowsdirectory% lib "kernel" alias "getwindowsdirectory" (byval a$, byval b%)
sub form1_load( )
dim st as string dim x as integer
dim tmp as string tmp = string$( 255, 32 )
’ 在 ini 文 件 內(nèi) 為 各 種 數(shù) 據(jù) 庫 格 式 指 明 已 安 裝 的 相 應(yīng) isam 驅(qū) 動(dòng) 程 序
x = oswriteprivateprofilestring(" installable isams", "paradox 3.x", "pdx110.dll", "mydb.ini" )
x = oswriteprivateprofilestring( "installable isams", "dbase iii", "xbs110.dll", "mydb.ini" )
x = oswriteprivateprofilestring( "installable isams", "dbase iv", "xbs110.dll", "mydb.ini" )
x = oswriteprivateprofilestring( "installable isams", "foxpro 2.0", "xbs110.dll", "mydb.ini" )
x = oswriteprivateprofilestring( "installable isams", "foxpro 2.5", "xbs110.dll", "mydb.ini" )
x = oswriteprivateprofilestring( "installable isams", "btrieve", "btrv110.dll", "mydb.ini" )
x = oswriteprivateprofilestring( "dbase isam", "deleted", "on", "mydb.ini" )
’ 指 明 ini 文 件 的 位 置
x = osgetwindowsdirectory( tmp, 255 )
st = mid$( tmp, 1, x ) setdataaccessoption 1, st + "\mydb.ini"
’ 獲 得 ini 文 件 一 些 參 數(shù)
gwmaxgridrows = val(getinistring( “ mydb.ini ” ,"maxrows", "250" ))
glquerytimeout = val(getinistring( “ mydb.ini ” ,"querytimeout", "5" ))
gllogintimeout = val(getinistring( “ mydb.ini ” ,"logintimeout", "20" ))
end sub
相關(guān)推薦:2009年4月計(jì)算機(jī)等級二級考試VF程序設(shè)計(jì)輔導(dǎo)北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |