数据库非Access数据库在VB中的编程及应用

vb数据库编程  时间:2021-01-27  阅读:()

非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 1x ) 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。

搬瓦工(季付46.7美元)新增荷兰(联通线路)VPS,2.5-10Gbps

搬瓦工最近新增了荷兰机房中国联通(AS9929、AS4837)线路的VPS产品,选项为NL - China Unicom Amsterdam(ENUL_9),与日本软银和洛杉矶(DC06)CN2 GIA配置一致可以互换,属于高端系列,2.5Gbps-10Gbps大带宽,最低季付46.7美元起。搬瓦工VPS隶属于老牌IT7公司旗下,主要提供基于KVM架构VPS主机,数据中心包括美国洛杉矶、凤凰城、纽...

tmhhost:暑假快乐,全高端线路,VPS直接8折,200G高防,美国gia日本软银韩国cn2香港cn2大带宽

tmhhost为2021年暑假开启了全场大促销,全部都是高端线路的VPS,速度快有保障。美国洛杉矶CN2 GIA+200G高防、洛杉矶三网CN2 GIA、洛杉矶CERA机房CN2 GIA,日本软银(100M带宽)、香港BGP直连200M带宽、香港三网CN2 GIA、韩国双向CN2。本次活动结束于8月31日。官方网站:https://www.tmhhost.com8折优惠码:TMH-SUMMER日本...

Puaex:香港vds,wtt套餐,G口带宽不限流量;可解流媒体,限量补货

puaex怎么样?puaex是一家去年成立的国人商家,本站也分享过几次,他家主要销售香港商宽的套餐,给的全部为G口带宽,而且是不限流量的,目前有WTT和HKBN两种线路的方面,虽然商家的价格比较贵,但是每次补一些货,就会被抢空,之前一直都是断货的状态,目前商家进行了补货,有需要这种类型机器的朋友可以入手。点击进入:puaex商家官方网站Puaex香港vds套餐:全部为KVM虚拟架构,G口的带宽,可...

vb数据库编程为你推荐
免费卡巴斯基杀毒软件怎样免费用卡巴斯基杀毒软件?手机浏览器哪个好手机浏览器哪个好?手机浏览器哪个好用?朱祁钰和朱祁镇哪个好历史上真实的明英宗是怎么样的?性格之类的。朱祁钰和朱祁镇的相关的最好可以详细点的浮动利率和固定利率哪个好贷款选择浮动利率还是固定利率手机音乐播放器哪个好手机音乐播放器音质好的APP是那款无纺布和熔喷布口罩哪个好大雾天气带什么样的口罩最好核芯显卡与独立显卡哪个好独立显卡和核芯显卡有什么区别车险哪个好人保和平安车险哪个好清理手机垃圾软件哪个好清理手机垃圾的软件哪个好腾讯空间登录QQ空间登录
天津服务器租赁 网通vps 域名备案流程 美国主机论坛 godaddy优惠券 免费ddos防火墙 免费个人网站申请 ca4249 169邮箱 双十一秒杀 100m独享 东莞服务器 路由跟踪 web应用服务器 国外在线代理服务器 个人免费邮箱 华为云建站 1美元 大化网 葫芦机 更多