在VB中兼容非ACCESS数据库的技巧

上传人:飞*** 文档编号:40571996 上传时间:2018-05-26 格式:DOCX 页数:9 大小:30.95KB
返回 下载 相关 举报
在VB中兼容非ACCESS数据库的技巧_第1页
第1页 / 共9页
在VB中兼容非ACCESS数据库的技巧_第2页
第2页 / 共9页
在VB中兼容非ACCESS数据库的技巧_第3页
第3页 / 共9页
在VB中兼容非ACCESS数据库的技巧_第4页
第4页 / 共9页
在VB中兼容非ACCESS数据库的技巧_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《在VB中兼容非ACCESS数据库的技巧》由会员分享,可在线阅读,更多相关《在VB中兼容非ACCESS数据库的技巧(9页珍藏版)》请在金锄头文库上搜索。

1、在在 VB 中兼容非中兼容非 ACCESS 数据库的技巧数据库的技巧摘要:摘要:本文从 VB 数据库体系结构的角度出发,结合一个具体实例,阐述了在 VB 中兼容非ACCESS 格式数据库的具体方法和技巧。关键词关键词:VB、非 ACCESS 数据库、数据存取对象一个完整的数据库管理系统(DBMS)应是能兼容市面上各种较流行数据格式的系统,它充分考虑了不同用户的实际要求。鉴于目前市面上有多种数据库格式(如Foxpro、DBase、Paradox 等)流行,因而在 VB 数据库应用程序中兼容非 Access 数据库就显得尤为重要了。作为一种流行的开发平台,VB 提供了强大的数据库功能。主要有以下三

2、种:数据控件法:使用数据存取对象(Data Access Object )法;直接调用 ODBC 2.0 API 接口函数法。其中调用数据存取对象的方法相对其它两种方法具有方便灵活、功能强大的突出优点。本文即从调用数据库存取对象的方法出发,实现了非 Access 格式数据库(以 FoxPro 数据库为例)的建新库、拷贝数据库结构、动态调入等操作,阐述了从编程技巧上弥补 VB 对这些外来数据库支持不足的可行性。一、VB 数据库的体系结构VB 数据库的核心结构是所谓的 MicroSoft JET 数据库引擎,它为 VB 与数据库的接口提供了基本的方法和手段。JET 引擎被 Visual Basic

3、、Microsoft Access 和其它 Microsoft 产品所共享。因而在 VB 中 Access 数据库格式是一种标准的内置格式,所有的非 Access 数据库都被称为外来数据库。JET 引擎的作用就像是一块“面板” ,在其上可以插入多种索引顺序存取方法(即ISAM)数据驱动程序。这就是 VB 对非 Access 数据库具有丰富支持的真正原因。VB 专业版中提供了 FoxPro、dBASE(或 Xbase) 、Paradox、Btrieve 等数据库的 ISAM 驱动程序,这就使得 VB 能支持这些数据库格式。另外,其他的许多兼容 ISAM 的驱动程序也可以通过从厂商的售后服务得到。

4、因而从理论上说,VB 能支持所有兼容 ISAM 的数据库格式(前提是只需获得这些数据库的 ISAM 驱动接口程序) 。二、使用非 Access 数据库时的参数设置及配置文件的参数读取值得注意的是,大多数的程序员都不注重数据库配置文件的使用,殊不知这是极为重要的。如果在 VB 的程序中使用了数据库的操作,将应用程序生成 EXE 文件或打包生成安装程序后,则必须提供一个数据库配置(.INI)文件,在 INI 文件中可以对不同类型的数据库进行设置。如果找不到这个 INI 文件,将会导致不能访问数据库。通常情况下,INI 文件的文件名和应用程序的名称相同,所以如果没有指明,VB 的程序会在 Windo

5、ws 子目录中去找和应用程序同名的 INI 文件。可以使用 VB 中的 SetDataAccessOptions 语句来设置 INI 文件。SetDataAccessOptions 语句的用法如下:SetDataAccessOptions 1,IniFileName 其中 IniFileName 参数指明的是 INI 文件的带路径的文件名。值得注意的是,当应用程序找不到这个 INI 文件时,或在调用 OpenDataBase 函数时对其 Connect 参数值没有设定为 VB 规定的标准值,如对 FoxPro 2.5 格式设定为了“FoxPro;”(应为“FoxPro 2.5;” ) ,或者没

6、有安装相应的 ISAM 驱动程序,则此时 VB 会显示一条错误信息“Not Found Installable ISAM” 。通常,INI 文件在应用程序分发出去以前已经生成,或者在安装时动态生成,也可以在应用程序中自己生成。通常这种 INI 文件中有“Options” 、 “ISAM” 、 “Installed ISAMs” 、“FoxPro ISAM” 、 “dBASE ISAM” 、 “Paradox ISAM”等设置段,对于一个完整的应用程序则还应有一个属于应用程序自己的设置段如“MyDB” 。可在其中设置DataType、Server、DataBase、OpenOnStartup、D

7、isplaySQL、QueryTimeOut 等较为重要的数据库参数,并以此限定应用程序一般的运行环境。Windows API 接口函数在 Win95 系统提供的动态链接库中提供了一个OSWritePrivateProfileString 函数,此函数能按 Windows 下配置文件(.INI)的书写格式写入信息。在通常情况下,应用程序还需要在运行时读取配置文件内相关项的参数。比如PageTimeOut(页加锁超时时限) 、MaxBufferSize(缓冲区大小) 、LockRetry(加锁失败时重试次数)等参数,通过对这些参数的读取对应用程序运行环境的设定、潜在错误的捕获等均会有很大的改善。

8、设此应用程序的数据库配置文件为 MyDB.INI,则具体过程如下:Funtion GetINIString$( Byval Fname$,Byval szItem$,Byval szDeFault$ )此自定义子函数实现 INI 文件内设置段内参数的读取Dim Tmp As String, x As IntegerTmp = String( 2048,32 )x = OSGetPrivateProfileString( Fname$,szItem$,szDefault$,Tmp,Len(Tmp), “MyDB.INI”)GetINIString = Mid$( Tmp,1,x )End Fun

9、ction通过此函数就能实现对各种数据库格式的读取。三、调用数据存取对象对非 Access 数据库编程的方法及其实例VB 专业版中使用数据库存取对象变量(DAO)的方法最具有功能强大、编程灵活的特点。它能够在程序中存取 ODBC 2.0 的管理函数;可以控制多种记录集类型:Dynaset,Snapshot 及 Table 记录集合对象;可以存储过程和查询动作;可以存取数据库集合对象,例如 TableDefs,Fields,Indexes 及 QueryDefs;具有真正的事物处理能力。这种方法对数据库处理的大多数情况都非常适用。从 VB 的程序代码的角度来看,提供给 VB 程序员的记录集对象(

10、RecordSet)同所使用的数据库格式及类型是相互独立的。即对 FoxPro 等数据库仍然可以使用众多的数据库存取对象变量,这就为非 Access 数据库的访问提供了最重要的前提和方法。在 VB 中从一种数据库类型转化为另一种数据库类型几乎不需要或只需要很少的代码修改。而且,尽管 dBASE、Paradox 本身的 DDL(Data Definition Language,即数据定义语言)和DML(Data Manipulation Language,即数据操纵语言)是非结构化查询的,但它们仍然可以使用 VB 的 SQL 语句和 JET 引擎来操纵。因而对 FoxPro 等非 Access

11、数据库而言,调用数据库存取对象的方法同样也是一种最佳的选择。(一)非 Access 数据库的新建及库结构的修改VB 专业版中的数据库存取对象变量可以分为两类,一类用于数据库结构的维护和管理,另一类用于数据的存取。其中表示数据库结构时可以使用下面的对象:DataBase、TableDef、Field、Index,以及三个集合(Collection):TableDefs、Fields 和Indexes。每一个集合都是由若干个对象组成的,这些数据对象的集合可以完全看作是一个数组,并按数组的方法来调用。一旦数据库对象建立后,就可以用它对数据库的结构进行修改和数据处理。对于非 Access 数据库,大部

12、分都是对应于一个目录,所以可以使用 VB 的 MkDir 语句先生成一个目录,亦即新建一个数据库。而每一个非 Access 数据库文件可看作是此目录下的一个数据表(Table) ,但实际上它们是互相独立的。下面是新建一个 FoxPro 2.5 格式数据库的程序实例。Sub CreateNew ( ) Dim Db1 As database, Td As TableDefsDim T1 As New Tabledef,F1 As New Field, F2 As New Field, F3 As New FieldDim Ix1 As New IndexDim Path As StringCon

13、st DB_TEXT = 10,DB_INTEGER = 3ChDir “ Path$ = InputBox( “请输入新路径名:“, “输入对话框“ )MkDir Path$ 新建一个子目录Set Db1 = OpenDatabase(Path$, True, False, “FoxPro 2.5;“)Set Td = Db1.TableDefsT1.Name = “MyDB“ 新建一个数据表,数据表名为 MyDBF1.Name = “Name“, F1.Type = DB_TEXT, F1.Size = 20F2.Name = “Class“, F2.Type = DB_TEXT, F2.

14、Size = 20F3.Name = “Grade“, F3.Type = DB_INTEGERT1.Fields.Append F1 向数据表中添加这些字段T1.Fields.Append F2T1.Fields.Append F3Ix1.Name = “Name“ ,Ix1.Fields = “Name“, Ix1.Primary = True 新建索引T1.Indexes.Append Ix1 向数据库的 Indexes 集合中添加新的索引Td.Append T1 向 TableDefs 集合中添加新表Db1.Close 必须先关闭数据库对象再退出End Sub在此段程序中值得注意的是,

15、对非 Access 数据库的新建不用 CreateDatabase 函数,而是用 OpenDatabase 函数,这点与 Access 数据库大不一样,但也仅仅是针对非 Access 数据库而言才能用 OpenDatabase 函数来新建一个数据库对象。在 VB 中,外来数据库的不同格式只在 OpenDatabase 函数的最后一个参数 Connect 中有所体现,不同格式的外来数据库其 Connect 参数值也不同,除此以外,在 VB 专业版中其编程的方法和步骤及技巧是基本相同的。新建子目录后,不能用 ChDir 语句进入它,否则会出现“MyDB is not a valid path”的错

16、误。同时,对 F1、F2、F3 等新建字段对象的定义也必须分别定义,否则会出现“Element not defined” (变量未定义)的错误。通过一定的编程技巧还可以实现非 Access 数据库的库结构的拷贝,下面是一段相应的程序。Function GetPos( TFname$ ) 此自定义函数完成对带路径文件名中最后一个“”符号的定位Dim I As Integer,Tmp As StringTmp$ = TFname$For I = 0 To 255 Pos% = Pos% + InStr( 1, Tmp$, “ )E1% = InStr( 1, Tmp$, “ )Tmp$ = Right$( Tmp$, Len(TFname$) - Pos% )If E1% = 0 Then 找到最后一个“”符号的位置,并记下来GetPos = Pos%Exit ForEnd IfNext IEnd FuntionSub CopyStruc( )Dim Db1 As database, Ds1 As Dynaset,Td A

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 其它考试类文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号