非Access数据库在VB中的编程及应用
目录
一、 VB数据库的体系结构具体的VB的数据库结构
二、使用非Access数据库时的参数设置及配置文件的参数读取如果在VB的程序中使用了数据库的操作
三、数据存取对象变量对外来数据库编程的方法及其实例在VB专业版数据库编程的三种方法中
一
正文
摘要 Visual Basic有着强大的数据库存取能力不仅能够直接支持Ms Access数据库而且通过其内部安装的ISAM驱动程序使它能间接支持FoxPro、 dBASE等外来数据库。本文不仅从VB数据库体系结构的角度探讨了VB对这些外来数据库的支持还结合了一些实例具体
阐述了使用数据库存取对象变量的方法实现这些外来数据库的新建、库结构修改、显示及其运行环境设置
关键词
Visual Basic Access 外来数据库数据库
正文
存取对象变量库结构作为一个功能较完备的Windows软件开发平台 Visual Basic专业版提供了对数据库应用的强大支持。尤其提供了使用数据控件和绑定控制项使用数据库存取对象变量DataAccess Object Variable 直接调用ODBC 2.0 API接口函数等三种访问数据库的方法。对其标准内置的Ms Access数据库它可以提供不弱于专业数据库软件的支持可以进行完整的数据库维护、操作及其事务处理。在VB中将非Access数据库称为外来数据库。对于FoxPro、 dBASE、 Paradox等外来数据库。虽然借助VB的DataManager能够对这些数据库进行NEW、 OPEN、 DES I GN、 DELETE等操作但在应用程序的运行状态中并不能从底层真正实现这些功能。本文从使用数据库存取对象变量的方法出发实现了非Access格式数据库以FoxPro数据库为例的建新库、拷贝数据库结构、动态调入等操作 阐述了从编程技巧上弥补VB对这些外来数据库支持不足的可行性。
一、 VB数据库的体系结构具体的VB的数据库结构。
VB数据库的核心结构是所谓的MicroSoft JET数据库引擎 JET引擎的作用就像是一块"面板"在其上可以插入多种ISAM IndexedSequential Access Method即索引顺序存取方法 数据驱动程序。 JET引擎为Access格式数据库提供了直接的内部build-in支持这就是VB对Ac ces s数据库具有丰富支持的真正原因。
VB专业版中提供了FoxPro、 dBASE 或Xbas e 、 Paradox、Btrieve等数据库的ISAM驱动程序这就使得VB能支持这些数据库格式。另外其他的许多兼容ISAM的驱动程序也可以通过从厂商的售后服务得到。因而从理论上说 VB能支持所有兼容I S AM的数据库格式
前提是只需获得这些数据库的I SAM驱动接口程序
由上可见 Ms JET引擎实质上提供了一个符合AI标准的语法分析器为查询结果集的使用而提供的内存管理功能 同所支持的数据库的外部接口为应用代码提供的内部接口。实际上在VB中从一种数据库类型转化为另一种数据库类型几乎不需要或只需要很少的代码修改。而且尽管dBASE、 Paradox本身的DDL Data Def init ionLanguage 即数据定义语言和DML Data Manipulation Language即数据操纵语言是非结构化查询的但它们仍然可以使用VB的S QL语句和JET引擎来操纵。
从VB的程序代码的角度来看 ODBC I SAM驱动程序以及M sAccess数据库的整个外部结构够可以统一为一个一致的编程接口。也即是说提供给VB应用程序员的记录集对象视图同所使用的数据库格式及类型是相互独立的。即对FoxPro等数据库仍然可以使用众多的数
据库存取对象变量这就为非Access数据库的访问提供了最重要的方法。
二、使用非Access数据库时的参数设置及配置文件的参数读取如果在VB的程序中使用了数据库的操作将应用程序生成EXE文件或打包生成安装程序后则必须提供一个配置 . INI文件在INI文件中可以对不同类型的数据库进行设置。如果找不到这个INI文件 将会导致不能访问数据库。通常情况下 INI文件的文件名和应用程序的名称相同所以如果没有指明 VB的程序会在Windows子目录中去找和应用程序同名的INI文件。可以使用VB中的SetDataAccessOptio语句来设置INI文件。
SetDataAccessOptio语句的用法如下 SetDataAccessOptio 1 IniFi leName其中IniFi l eName参数指明的是INI文件的带路径的文件名。值得注意的是 当应用程序找不到这个INI文件时或在调用OpenDataBase函数时对其Connect参数值没有设定为VB规定的标准值如对FoxPro 2.5格式设定为了" FoxPro;" 应为" FoxPro 2.5;" 或者没有安装相应的I SAM驱动程序则此时VB会显示一条错误信息" Not Found Itallable ISAM "。通常 INI文件在应用程序分发出去以前已经生成或者在安装时动态生成也可以在应用程序中自己生成。 通常这种INI文件中有" [Optio]"、 "[ISAM]"、 " [ItalledISAMs]"、 "[FoxPro ISAM]"、 "[dBASE ISAM] " 、 " [Paradox ISAM]"等设置段对于一个完整的应用程序则还应有一个属于应用程序自己的设置段如" [MyDB]” 。可在其中设置DataType、 Server、
DataBase、 OpenOtartup、 DisplaySQL、 QueryTimeOut等较为重要的数据库参数并以此限定应用程序一般的运行环境。 Windows API接口函数在Kernel.exe动态链接库中提供了一个
OSWritePrivateProfi leString函数此函数能按Windows下配置文件
. INI的书写格式写入信息。
在通常情况下应用程序还需要在运行时读取配置文件内相关项的参数。 比如PageTimeOut 页加锁超时时限 、 MaxBuffe ize 缓冲区大小 、 LockRetry 加锁失败时重试次数等参数通过对这些参数的读取对应用程序运行环境的设定、潜在错误的捕获等均会有很大的改善。
设此应用程序的配置文件为MyDB. INI则具体过程如下 Funt i onGetINIString$( Byval Fname$ Byval szItem$ ByvalszDeFault$ ) '此自定义子函数实现INI文件内设置段内参数的读取Dim Tmp As String x As Integer Tmp =
String( 2048 32 ) x = OSGetPrivateProf ileString(Fname$ szDefault(Tmp) " MyDB. INI " ) GetINIString = Mid$( Tmp 1x ) EndFuncti on以下这些函数的声明可写在模块文件内且每个函数的声明必须在一行内Declare Function OSGetPrivateProfileString%Lib "Kernel" Alias "GetPrivateProf ileString" (ByVal
AppName$ ByVal KeyName$ ByVal keydefault$ ByVal
Returtring$ ByVal NumBytes As Integer ByVal FileName$)Declare Function OSWritePrivateProfileString% Lib "Kernel"
Alias "WritePrivateProfileString" (ByVal AppName$ ByValKeyName$ ByVal keydefault$ ByVal Fi leName$) DeclareFunction 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(" Itallable ISAMS" "Paradox
3.X" "PDX 110.DLL" "MyDB. INI" ) x =
OSWritePrivateProfileString( "Itallable ISAMS" "dBASEI II" "XBS110.DLL" "MyDB. INI" ) x =
OSWritePrivateProfileString( "Itallable ISAMS" "dBASE IV""XBS 110.DLL" "MyDB. I NI" ) x =
OSWritePrivateProfileString( "Itallable ISAMS" "FoxPro
2.0" "XB S 110.D LL" "MyDB. INI" ) x =
OSWritePrivateProfileString( "Itallable ISAMS" "FoxPro
2.5" "XB S 110.D LL" "MyDB. INI" ) x =
OSWritePrivateProfileString( "Itallable ISAMS" "Btrieve""BTRV110.DLL" "MyDB. INI" ) x =
OSWritePrivateProfileString( "dBase ISAM" "Deleted"
"On" "MyDB. INI" ) '指明I NI文件的位置x =
OSGetWindowsDirectory( tmp 255 ) st = Mid$( tmp 1 x )SetDataAccessOption 1 st + "\mydb. ini" '获得INI文件一些参
数gwMaxGr idRows = Val (GetINIString( " MyDB. INI "
"MaxRows" "250" ) ) glQueryTimeout = Val(GetINIString( "MyDB. INI " "QueryTimeout" "5" )) glLoginTimeout =
Val(GetINIString( " MyDB. INI " "LoginTimeout" "20" )) EndS ub
三、数据存取对象变量对外来数据库编程的方法及其实例在VB专业版数据库编程的三种方法中第二种-使用数据库存取对象变量
DA O的方法最具有功能强大、灵活的特点。 它能够在程序中存取ODBC 2.0的管理函数可以控制多种记录集类型 Dynaset Snapshot及Tab l e记录集合对象可以存储过程和查询动作可以存取数据库集合对象例如TableDefs Fields Indexes及QueryDefs具有真正的事物处理能力。因而这种方法对数据库处理的大多数情况都非常适用。
由于VB中的记录集对象与所使用的数据库格式及类型是相互独立的所以在非Access数据库中也可以使用数据库存取对象变量的方法。因而对FoxPro等外来数据库而言使用数据库存取对象变量的方法同样也是一种最佳的选择。 有一点需要注意的是 VB的标准版中仅能使用数据控件Data Control对数据库中的记录进行访问主要的数据库存取对象中也仅有Database、 Dynaset对象可通过数据控件的属性提供其它的重要对象如TableDef、 Field、 Index、QueryDef、 Snapshot、 Table等均不能在VB的标准版中生成所以使用数据存取对象变量的方法只能用VB 3.0以上的专业版。
一 、非Access数据库的新建及库结构的修改VB专业版中的数据库存取对象变量可以分为两类一类用于数据库结构的维护和管理另一类用于数据的存取。其中表示数据库结构时可以使用下面的对象
DataBase、 TableDef、 Field、 Index 以及三个集合
Collection TableDefs、 Fields和Indexes 。每一个集合都是由若干个对象组成的这些数据对象的集合可以完全看作是一个数组并按数组的方法来调用。一旦数据库对象建立后就可以用它对数据库的结构进行修改和数据处理。对于非Access数据库大部分都是对应于一个目录所以可以使用VB的M kD i r语句先生成一个目录亦即新建一个数据库。而每一个非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 Field Dim Ix1 As New Index Dim Path AsString Cot DB_TEXT = 10 DB
_INTEGER = 3 ChDir "\" Path$ = InputBox( "请输入新路径名 " "输入对话框" ) MkDir Path$ '新建一个子目录Set Db1 =OpenDatabase(Path$ True False "FoxPro 2.5;") Set Td =Db1.TableDefs T1.Name ="MyDB" '新建一个数据表数据表名为MyDB
F1.Name = "Name" F1.Type = DB_TEXT F1.Size = 20 F2.Name= "C las s" F2.Type = DB_TEXT F2.Si ze = 20 F3.Name ="Grade" F3.Type = DB_INTEGER F1 ' F2。
Tudcloud是一家新开的主机商,提供VPS和独立服务器租用,数据中心在中国香港(VPS和独立服务器)和美国洛杉矶(独立服务器),商家VPS基于KVM架构,开设在香港机房,可以选择限制流量大带宽或者限制带宽不限流量套餐。目前提供8折优惠码,优惠后最低每月7.2美元起。虽然主机商网站为英文界面,但是支付方式仅支付宝和Stripe,可能是国人商家。下面列出部分VPS主机套餐配置信息。CPU:1cor...
spinservers怎么样?spinservers大硬盘服务器。Spinservers刚刚在美国圣何塞机房补货120台独立服务器,CPU都是双E5系列,64-512GB DDR4内存,超大SSD或NVMe存储,数量有限,机器都是预部署好的,下单即可上架,无需人工干预,有需要的朋友抓紧下单哦。Spinservers是Majestic Hosting Solutions,LLC旗下站点,主营美国独立...
进入6月,各大网络平台都开启了618促销,腾讯云目前也正在开展618云上Go活动,上海/北京/广州/成都/香港/新加坡/硅谷等多个地区云服务器及轻量服务器秒杀,最低年付95元起,参与活动的产品还包括短信包、CDN流量包、MySQL数据库、云存储(标准存储)、直播/点播流量包等等,本轮秒杀活动每天5场,一直持续到7月中旬,感兴趣的朋友可以关注本页。活动页面:https://cloud.tencent...