一、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中从一种数据库类型转化为另一种数据库类型几乎不需要或只需要
俚拇胄薷摹6遥」躣BASE、Paradox本身的DDL(Data Definition
Language,即数据定义语言)和DML(DataManipulation
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]”、“[dBASEISAM]”、“[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
FunctionOSGetPrivateProfileString% 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$, ByValFileName$)
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




