扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
二、使用非access数据库时的参数设置及配置文件的参数读取
如果在vb的程序中使用了数据库的操作,将应用程序生成exe文件或打包生成安装程序后,则必须提供一个配置(.ini)文件,在ini文件中可以对不同类型的数据库进行设置。如果找不到这个ini文件,将会导致不能访问数据库。通常情况下,ini文件的文件名和应用程序的名称相同,所以如果没有指明,vb的程序会在windows子目录中去找和应用程序同名的ini文件。可以使用vb中的setdataaccessoptions语句来设置ini文件。
setdataaccessoptions语句的用法如下:
setdataaccessoptions1,inifilename
其中inifilename参数指明的是ini文件的带路径的文件名。值得注意的是,当应用程序找不到这个ini文件时,或在调用opendatabase函数时对其connect参数值没有设定为vb规定的标准值,如对foxpro2.5格式设定为了“foxpro;”(应为“foxpro2.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(加锁失败时重试次数)等参数,通过对这些参数的读取对应用程序运行环境的设定、潜在错误的捕获等均会有很大的改善。
设此应用程序的配置文件为mydb.ini,则具体过程如下 :
funtion getinistring$( byval fname$ , byval szitem$ , byval szdefault$ ) ’ 此 自定义子函数实现ini文件内设置段内参数的读取
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
以下这些函数的声明可写在模块文件内,且每个函数的声明必须在一行内
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 文 件 内 为 各 种 数 据 库 格 式 指 明 已 安 装 的 相 应 isam 驱 动 程 序
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 文 件 一 些 参 数
gwmaxgridrows = val(getinistring( “ mydb.ini ” ,"maxrows", "250" ))
glquerytimeout = val(getinistring( “ mydb.ini ” ,"querytimeout", "5" ))
gllogintimeout = val(getinistring( “ mydb.ini ” ,"logintimeout", "20" ))
end sub
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者