转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
非Access数据库在VB中的编程及应用         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:620 更新时间:2009/4/23 14:58:30
摘要Visual Basic有着强大的数据库存取能力,不仅能够直接支持Ms Access数据库,而且通过其内部安装的ISAM驱动程序使它能间接支持FoxPro、dBASE等外来数据库。本文不仅从VB数据库体系结构的角度探讨了VB对这些外来数据库的支持,还结合了一些实例具体阐述了使用数据库存取对象变量的方法实现这些外来数据库的新建、库结构修改、显示及其运行环境设置。关键词Visual Basic Access外来数据库数据库存取对象变量库结构 作为一个功能较完备的Windows软件开发平台,Visual Basic专业版提供了对数据库应用的强大支持。尤其提供了使用数据控件和绑定控制项,使用数据库存取对象变量(Data Access Object Variable),直接调用ODBC 2.0 API接口函数等三种访问数据库的方法。对其标准内置的Ms Access数据库,它可以提供不弱于专业数据库软件的支持,可以进行完整的数据库维护、操作及其事务处理。在VB中,将非Access数据库称为外来数据库。对于FoxPro、dBASE、Paradox等外来数据库。虽然借助VB的Data Manager能够对这些数据库进行NEW、OPEN、DESIGN、DELETE等操作,但在应用程序的运行状态中并不能从底层真正实现这些功能。本文从使用数据库存取对象变量的方法出发,实现了非Access格式数据库(以FoxPro数据库为例)的建新库、拷贝数据库结构、动态调入等操作,阐述了从编程技巧上弥补VB对这些外来数据库支持不足的可行性。

  一、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$)

Declare Function OSGetWindowsDirectory% Lib "Kernel" Alias"GetWindowsDirectory" (ByVal a$, ByVal b%)

Sub Form1_Load( )

  Dim st As String
  Dim xAs Integer
  Dim tmp As String
  tmp = String$( 255, 32 ) ’在INI文件内为各种数据库格式指明已安装的相应ISAM驱动程序
  x = OSWritePrivateProfileString("Installable ISAMS", "Paradox 3.X", "PDX110.DLL", "MyDB.INI" )
  x =OSWritePrivateProfileString( "Installable ISAMS", "dBASE III", "XBS110.DLL","MyDB.INI" )
  x = OSWritePrivateProfileString( "Installable ISAMS", "dBASE IV","XBS110.DLL", "MyDB.INI" )
  x = OSWritePrivateProfileString( "Installable ISAMS","FoxPro 2.0", "XBS110.DLL", "MyDB.INI" )
  x = OSWritePrivateProfileString( "InstallableISAMS", "FoxPro 2.5", "XBS110.DLL", "MyDB.INI" )
  x = OSWritePrivateProfileString("Installable ISAMS", "Btrieve", "BTRV110.DLL", "MyDB.INI" )
  x =OSWritePrivateProfileString( "dBase ISAM", "Deleted", "On", "MyDB.INI" ) ’ 指明INI文件的位置
  x = OSGetWindowsDirectory( tmp, 255 )
  st = Mid$( tmp, 1, x )SetDataAccessOption 1, st + "\mydb.ini" ’ 获得INI文件一些参数
  gwMaxGridRows= Val(GetINIString( “ MyDB.INI ” ,"MaxRows", "250" ))
  glQueryTimeout =Val(GetINIString( “ MyDB.INI ” ,"QueryTimeout", "5" ))
  glLoginTimeout =Val(GetINIString( “ MyDB.INI ” ,"LoginTimeout", "20" ))
End Sub

三、数据存取对象变量对外来数据库编程的方法及其实例在VB专业版数据库编程的三种方法中,第二种—使用数据库存取对象变量(DAO)的方法最具有功能强大、灵活的特点。它能够在程序中存取ODBC 2.0的管理函数;可以控制多种记录集类型:Dynaset,Snapshot及Table记录集合对象;可以存储过程和查询动作;可以存取数据库集合对象,例如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的MkDir语句先生成一个目录,亦即新建一个数据库。而每一个非Access数据库文件可看作是此目录下的一个数据表(Table),但实际上它们是互相独立的。下面是新建一个FoxPro 2.5格式数据库的程序实例。
Sub CreateNew ( )
  Dim Db1 As database ,Td As TableDefs
  Dim T1 As New Tabledef , F1 As New Field , F2 As New Field , F3 As New Field
  Dim Ix1 As New Index
  Dim Path As String
  Const 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 = 20F2.Name = "Class" , F2.Type = DB_TEXT , F2.Size = 20 F3.Name = "Grade" ,F3.Type = DB_INTEGER T1.Fields.Append F1 ’ 向数据表中添加这些字段
  T1.Fields.Append F2 


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台