VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - VB 5.0数据库设计技术讲座(3)
发表评论(0)作者:倪秉书, 平台:VB6.0+Win98, 阅读:10721, 日期:2000-10-01
用编程方式访问数据库
VB 5.0数据库设计技术讲座(3)
(作者:倪秉书 2000年06月09日 15:52)


  在第一讲已经介绍过VB数据库中可以包括多于一个的表,其实除了表之外,VB数据库还可以包含查询定义、记录集、关系等可操作的元素,每个元素用一个对象名表示,可利用对象的属性和方法进行访问。VB数据库就是通过这些对象按照一定的层次结构组合而成的,如图1。

  在VB数据库中的表、查询、记录集、关系等对象可能都不只一个,而是由多个组成一个同性质的对象集合,在层次结构图中,为那些可以多个组成一个集合的对象名后加(s),比如,可有多个Database对象就表示为Database(s)在这些对象中,最高顶级的DBEngine对象只有惟一的一个。了解这个层次结构图,就可以知晓数据库中每个对象所在的层次位置,比如RecordSet对象包含在Database对象中;并且借助该表还能方便直观地写出访问这些嵌套对象的语法。比如:Debug.Print VBdatabase.Recordsets.

  Count 表明引用所定义的VBdatabase数据库对象下的Recordsets对象集合中的Count属性,即在“立即”窗中打印出数据库对象中包含的记录集的个数。

  以下介绍常用对象的具体概念、定义和引用方法。

  数据访问对象

  (Data Access Object)

  VB对数据库中各元素的操作都要通过定义相应类型的数据访问对象,让其与VB所提供的各种元素相关联,然后通过引用这些对象的属性和方法进行对象的访问,对象类似高级语言中所定义的变量。VB常用有以下几种对象:

  1. VB数据库引擎对象(VB DBEngine Object):在对象层次结构模型中处于最高顶级的一个对象,是VB的数据库管理系统(DBMS),它在用户信息库和系统信息库中检索和保存数据;

  2.工作空间对象:(WorkSpace Object):VB数据库引擎访问数据源的工作区。

  3.数据库对象(Database Object): 代表一个已打开的数据库,数据库对象是对数据库实施操作时首先要使用的对象。可用OpenDatabase函数打开一个库。

  4.表对象(TableDef Object):代表数据库中已定义和存在的一个表。与数据库对象类似,要操作一个表,首先要定义一个表对象,使其和特定的表相对应,然后引用它的属性和方法,比如通过Name属性可得到表的名称,Count属性可得到表的个数等。

  5. 查询对象(QueryDef Object):代表数据库中存在的一个查询定义。

  6.记录集对象(Recordset Object):VB表中的记录不允许直接操作,必须通过记录集对象进行浏览与操作。第一讲中已经介绍过,创建记录集可有三种类型:表类型记录集(Table-type Recordset)、动态类型记录集(Dynaset-type Recordset)、快照记录集(Snapshot -type Recordset),相应的也有三种类型的记录集对象与之对应,所有这些记录集最终也都要通过这些记录集对象所提供的属性和方法来进行操作。可通过数据库对象的OpenRecordset方法打开一个表,创建一个记录集。

  务必注意的是,在进行对象的定义和引用之前,要确保已首先引用了数据访问对象(DAO),否则将不能定义各种数据访问对象,且运行时会出错。要引用DAO,可点击“工程”选单,选择“引用”选项,然后点击“Microsoft DAO 3.5 Object Library”复选框,按确定。

  可以通过在代码窗的声明节中加入如下代码格式来定义一个指定类型的对象:dim 对象名 as 对象类型名;并通过如下代码格式来把一个对象赋予一个对象变量:set 对象变量=对象名,其中对象名的位置也可以是所声明的相同对象类型的其它变量,或者返回相同对象类型的函数或方法所组成的表达式。

  各对象都有多种的属性与方法,不同对象的属性与方法一般互不相同,但像name等属性是对象所共同拥有的,在书写引用一个对象变量的格式时,系统会出现一个与该对象相关的所有属性与方法的下拉式列表框,可把光标移到相应的属性名和方法名中,按F1寻求帮助。

  对象常用属性应用实例

  以下通过修改第二讲中所介绍工程的四个Command控件的Click事件,在不使用 Data控件的情况下,完全利用DAO来实现Data控件的功能,通过它来具体熟悉如何定义各种对象以及如何引用对象的各种属性与方法:

  Option Explicit

  Dim DbWorkspace As Workspace

  Dim DbDatabase As Database

  Dim DbRecordset As Recordset  ′以上定义各数据访问对象

  

  Private Sub CmdFirst—Click()

  UpdateRecord ′如果有对当前记录做改变,则调用自定义函数保存任何的改变

  DbRecordset.MoveFirst ′移动到记录集中的首记录

  DisplayFields ′调用自定义函数显示当前记录各字段的内容

  TxtName.SetFocus

  End Sub



  Private Sub CmdLast—Click()

  UpdateRecord ′保存任何的改变

  DbRecordset.MoveLast ′移动到记录集中的末记录

  DisplayFields

  TxtName.SetFocus

  End Sub

  

  Private Sub CmdNext—Click()

  If TxtName.Text 〈〉 "" And TxtPhone.Text 〈〉 "" And TxtAddress.Text 〈〉 "" Then

  UpdateRecord

  ′当姓名、电话和地址三字段都不为空时,在记录集中保存本文框的内容

  DbRecordset.MoveNext ′移动到记录集的下一个记录

  If DbRecordset.EOF Then NewRecord

  ′如果在记录集的EOF,则调用自定义函数,插入一个新记录

   DisplayFields

  End If

  TxtName.SetFocus

  End Sub



  Private Sub CmdPrevious—Click()

  UpdateRecord

  DbRecordset.MovePrevious ′移动到记录集的前一个记录

  If DbRecordset.BOF Then DbRecordset.MoveNext

  ′如果在记录集的BOF,则移到下一个记录,即回到首记录。

   DisplayFields

  TxtName.SetFocus

  End Sub



  Private Sub Form—Load()

  Set DbWorkspace = DBEngine.Workspaces(0)

  ′用Set 语句将VB数据引擎默认的工作区引用赋给所定义的工作区对象变量

  Set DbDatabase = DbWorkspace.OpenData_

  base("c:\myfile.mdb")

  ′通过工作区对象的Opendatabase方法打开一个库文件,并赋给所定义的数据库对象变量

  Set DbRecordset = DbDatabase.OpenRecor_

  dset("phone", dbOpenTable)

  ′通过数据库对象的OpenRecordset方法打开库文件中的一个表,创建一个记录集,并赋给记录集对象变量

  If DbRecordset.BOF And DbRecordset.EOF Then NewRecord

  ′如果是空库,则加入一个新记录

   DbRecordset.MoveFirst ′移动到首记录

   DisplayFields

  End Sub

  

  Private Sub UpdateRecord() ′实现把文本框中的任何改变保存到数据库的自定义函数

  DbRecordset.Edit ′记录集对象的一个方法,充许对记录进行编辑与修改

  DbRecordset!姓名 = TxtName.Text ′把文本框的内容保存到记录集的相应字段中

  DbRecordset!电话 = TxtPhone.Text

  DbRecordset!地址 = TxtAddress.Text

  DbRecordset.Update ′把对记录的任何改变写回数据库中

  End Sub



  Private Sub NewRecord() ′实现向记录集中插入一条新记录的自定义函数

  DbRecordset.AddNew ′向一个可修改的记录集对象插入一条新记录

  DbRecordset!姓名 = "" ′给新记录的各字段赋初值

  DbRecordset!电话 = ""

  DbRecordset!地址 = ""

  DbRecordset.Update ′把对记录的任何改变写回数据库中,取代旧的记录

  DbRecordset.MoveLast

  End Sub



  Private Sub DisplayFields() ′实现把指定记录的各字段值显示在文本框中的自定义函数

  TxtName.Text = DbRecordset!姓名 ′在文本框中显示指定的字段值

  TxtPhone.Text = DbRecordset!电话

  TxtAddress.Text = DbRecordset!地址

  End Sub


  图1 VB数据库数据访问对象(DAO)层次结构图