用编程方式访问数据库
VB 5.0数据库设计技术讲座(3)
(作者:倪秉书)
在第一讲已经介绍过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