在VB中兼容非ACCESS数据库的技能
核心提示:本文从VB数据库体系结构的角度动身,结合1个具体实例,论述了在VB中兼容非ACCESS格式数据库的具体方法和技能。
本文从VB数据库体系结构的角度动身,结合1个具体实例,论述了在VB中兼容非ACCESS格式数据库的具体方法和技能。
关键词:VB、非ACCESS数据库、数据存取对象
1个完全的数据库治理系统(DBMS)应是能兼容市面上各种较流行数据格式的系统,它充分考虑了不同用户的实际要求。鉴于目前市面上有多种数据库格式(如Foxpro、DBase、Paradox等)流行,因此在VB数据库利用程序中兼容非ACCESS数据库就显得尤其重要了。
作为1种流行的开发平台,VB提供了强大的数据库功能。主要有以下3种:数据控件法:使用数据存取对象(Data Access Object )法;直接调用ODBC 2.0 API接口函数法。其中调用数据存取对象的方法相对其它两种方法具有方便灵活、功能强大的突出优点。本文即从调用数据库存取对象的方法动身,实现了非ACCESS格式数据库(以FoxPro数据库为例)的建新库、拷贝数据库结构、动态调进等操纵,论述了从编程技能上弥补VB对这些外来数据库支持不足的可行性。
1、VB数据库的体系结构
VB数据库的核心结构是所谓的MicroSoft JET数据库引擎,它为VB与数据库的接口提供了基本的方法和手段。JET引擎被Visual Basic、Microsoft ACCESS和其它Microsoft产品所共享。因此在VB中Access数据库格式是1种标准的内置格式,所有的非ACCESS数据库都被称为外来数据库。
JET引擎的作用就像是1块“面板”,在其上可以插进多种索引顺序存取方法(即ISAM)数据驱动程序。这就是VB对非ACCESS数据库具有丰富支持的真正缘由。VB专业版中提供了FoxPro、dBASE(或Xbase)、Paradox、Btrieve等数据库的ISAM驱动程序,这就使得VB能支持这些数据库格式。另外,其他的很多兼容ISAM的驱动程序也能够通过从厂商的售后服务得到。因此从理论上说,VB能支持所有兼容ISAM的数据库格式(条件是只需取得这些数据库的ISAM驱动接口程序)。
2、使用非ACCESS数据库时的参数设置及配置文件的参数读取
值得留意的是,大多数的程序员都不重视数据库配置文件的使用,却不知这是极其重要的。
假设在VB的程序中使用了数据库的操纵,将利用程序天生EXE文件或打包天生安装程序后,则必须提供1个数据库配置(.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会显示1条毛病信息“Not Found Installable ISAM”。
通常,INI文件在利用程序分发出往之前已天生,或在安装时动态天生,也能够在利用程序中自己天生。通常这类INI文件中有“[Options]”、“[ISAM]”、“[Installed ISAMs]”、“[FoxPro ISAM]”、“[dBASE ISAM]”、“[Paradox ISAM]”等设置段,对1个完全的利用程序则还应有1个属于利用程序自己的设置段如“[MyDB]”。可在其中设置DataType、Server、DataBase、OpenOnStartup、DisplaySQL、QueryTimeOut等较为重要的数据库参数,并以此限定利用程序1般的运行环境。
Windows API接口函数在Win95系统提供的动态链接库中提供了1个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 |
通过此函数便可以实现对各种数据库格式的读取。
3、调用数据存取对象对非ACCESS数据库编程的方法及实在例
VB专业版中使用数据库存取对象变量(DAO)的方法最具有功能强大、编程灵活的特点。它能够在程序中存取ODBC 2.0的治理函数;可以控制多种记录集类型:Dynaset,Snapshot及Table记录集合对象;可以存储进程和查询动作;可以存取数据库集合对象,例如TableDefs,Fields,Indexes及QueryDefs;具有真实的事物处理能力。这类方法对数据库处理的大多数情况都非常适用。
从VB的程序代码的角度来看,提供给VB程序员的记录集对象(RecordSet)同所使用的数据库格式及类型是相互独立的。即对FoxPro等数据库依然可使用众多的数据库存取对象变量,这就为非ACCESS数据库的访问提供了最重要的条件和方法。
在VB中从1种数据库类型转化为另1种数据库类型几近不需要或只需要很少的代码修改。而且,虽然dBASE、Paradox本身的DDL(Data Definition Language,即数据定义语言)和DML(Data Manipulation Language,即数据操纵语言)是非结构化查询的,但它们依然可使用VB的SQL语句和JET引擎来操纵。
因此对FoxPro等非ACCESS数据库而言,调用数据库存取对象的方法一样也是1种最好的选择。
(1)非ACCESS数据库的新建及库结构的修改
VB专业版中的数据库存取对象变量可以分为两类,1类用于数据库结构的保护和治理,另1类用于数据的存取。其中表示数据库结构时可使用下面的对象:DataBase、TableDef、Field、Index,和3个集合(Collection):TableDefs、Fields和Indexes。每1个集合都是由若干个对象组成的,这些数据对象的集合可以完全看做是1个数组,并按数组的方法来调用。
1旦数据库对象建立后,便可以够用它对数据库的结构进行修改和数据处理。
对非ACCESS数据库,大部份都是对应于1个目录,所以可使用VB的MkDir语句先天生1个目录,亦即新建1个数据库。而每1个非ACCESS数据库文件可看做是此目录下的1个数据表(Table),但实际上它们是相互独立的。
下面是新建1个FoxPro 2.5格式数据库的程序实例。
以下为援用的内容: Sub CreateNew ( ) |
在此段程序中值得留意的是,对非Access数据库的新建不用CreateDatabase函数,而是用OpenDatabase函数,这点与Access数据库大不1样,但也仅仅是针对非ACCESS数据库而言才能用OpenDatabase函数来新建1个数据库对象。
在VB中,外来数据库的不同格式只在OpenDatabase函数的最后1个参数Connect中有所体现,不同格式的外来数据库其Connect参数值也不同,除此之外,在VB专业版中其编程的方法和步骤及技能是基本相同的。
新建子目录后,不能用ChDir语句进进它,否则会出现“‘MyDB’ is not a valid path”的毛病。同时,对F1、F2、F3等新建字段对象的定义也必须分别定义,否则会出现“Element not defined”(变量未定义)的毛病。
通过1定的编程技能还可以实现非ACCESS数据库的库结构的拷贝,下面是1段相应的程序。
Function GetPos( TFname$ ) ’此自定义函数完成对领路径文件名中最后1个“\”符号的定位
以下为援用的内容: Dim I As Integer,Tmp As String |
可见,拷贝库结构的方法在于把1个已存在的数据库拷贝到1个新文件中,然后再删除新文件内的所有记录,保存其库结构,得到的就是1个新建的库结构完全的空库。
(2)非ACCESS数据库的动态调进
在实际利用的很多情况下,常常需要在对1些事前其实不知道其具体库结构的数据库进行调进、显示及打印其记录。因此实现未知格式数据库的动态调进也是评价VB数据库利用程序兼容性的1个重要标志。
在VB中,网格控件非常适适用于浏览数据库中的数据,只需把数据放进网格即可。
在使用网格时动态调进的关键在于记录(Colume)内容和字段(Row)内容(包括字段的名称、类型、值等)的读取,因此天生1个可以对应于1个或多个数据表中的全部或部份记录的Dynaset对象是非常必要的。Dynaset对象还可以是1个动态查询的结果,能进行记录的增加、删除和修改等操纵。
下面是1段用网格显示FoxPro数据库的程序。
以下为援用的内容: Sub DBLoad( ) |
最后应记住,在VB的数据库利用程序运行之前,1定要在AUTOEXEC.BAT文件中加进1句SHARE.EXE /L:500。
以上所有程序均在Pentium/166机、中文Windows95下用VB4调试通过。
4、结束语
对非Access数据库的兼容是VB数据库编程中不可分割的重要部份。因此熟练掌控使用DAO方法对非ACCESS数据库的编程是极其重要的。并且,1定编程技能的利用也有助于弥补VB对外来数据库支持的不足。
http://www.fw8.net/TAG:数据库,程序,格式,函数,对象
评论加载中...
|