Dao对象模型

  • 格式:doc
  • 大小:43.00 KB
  • 文档页数:5

Dao对象模型DAO提供了两种不同的对象模型,一种对象模型是通过Jet引擎来访问数据,如下图所示。

另一种对象模型是通过ODBCDirect来访问数据。

这两种对象模型都是层次结构的。

现在分别对这两种对象模型进行介绍。

DBEngine是一个基于对象,它包含了两个重要的集合(Collection),一个是Errors集合,另一个是Workspaces集合。

对DAO的操作总会产生一些错误,每产生一个错误,DAO就生成一个Error对象,这些Error对象都放在Errors集合中,可以用Errors.Count来计算错误的个数。

事实上,对于每一个集合,都可以用Collection.Count来求出该集合中对象的个数。

每一个应用程序只能有一个DBEngine对象,但可以有多个Workspace对象,这些Workspace 对象都包含在Workspace集合中。

每个Workspace对象都包含了一个Database对象对应了一个数据库,它里面包含了许多用于操作数据库的对象。

这些对象中,有一些是Jet数据库专用的,如Container、TableDef和Relation对象,有一些则是对所有数据库都有用的,如Recordset对象和QueryDef对象。

下面对对象模型中的主要对象进行详细的说明。

1.DBEngine对象DBEngine对象是惟一的,不能创建,也不能声明。

通常,可以用DBEngine对象的属性来设置数据库访问的安全性,即设置访问数据库缺省用户名和缺省口令,如:Dim DbEn AS DAO.DBEngine=New DAO.DBEngine()DbEn.DefaultUser="RtLinux"DbEn.DefaultPassword="aaa"由于Jet数据库引擎允许用户定义一个工作组,对于工作组中的每一个用户可以设置不同的数据库访问权限。

必须把存储这个工作组有关信息的文件告诉DAO,方法就是设置DBEngine对象的"SystemDB"属性,如:DbEn.SystemDB="C:\"&"System.mdw"当使用Jet数据库引擎时,必须把DBEngine对象的"DefaultType"属性设置为"dbUseJet"。

DBEngine对象还提供了很多方法来操作工作区(Workspace)和数据库,如:Creat Workspace 方法创建一个工作区,Creatdatabase创建一个数据库,OpenDatabase打开一个数据库,CompactDatabase压缩一个数据库,RepairDatabase修复一个数据库,等等。

2.Error对象Error对象是DBEngine对象的一个子对象。

在发生数据库操作错误时,可以用标准的VB的Err对象来进行错误处理,也可以把错误信息保存在DAO的Error对象中。

Error对象包含以下属性:(1)Description属性。

这个属性包含了错误警告信息文本,如果没有进行错误处理,这个文本将出现在屏幕上。

(2)Number属性。

这个属性包含了产生错误的错误号。

(3)Source属性。

这个属性包含了产生错误的对象名。

(4)HelpFile属性和HelpContext属性。

这两个属性设置有关这个错误的Windows帮助文件和帮助主题。

3.Workspace对象一个Workspace对象定义一个数据库会话(Session)。

会话描述出由Microsoft Jet完成的一系列功能,所有在会话期间的操作形成了一个事务范围,并服从于由用户名和密码决定的权限。

所有的Workspace对象组合在一起形成了一个Workspace集合。

可以用DBEngine对象的CreateWorkspace方法画创建一个新的工作区,只需把工作区的名称和用户信息传递给这个方法,如:注意:当创建了一个新的Workspace对象时,它并不会自动添加到Workspace集合中,必须用Append方法把Workspace对象添加到Workspace集合中。

4.Database对象一旦用CreateDatabase创建了一个数据库或用OpenDatabase打开了一个数据库,就生成了一个Database对象。

所有的Database对象都自动添加到Database集合中。

下面的这段代码就是使用Database集合列出了所有的数据库的路径名:db=ws.OpenDatabase(txtMDBFile.text)Database对象有5个子集合,分别是Recordsets集合,QueryDefs集合,TableDefs集合,Relation 集合和Containers集合,这些集合分别是Recordset对象、QueryDef对象、TableDef对象、Relation对象和Container对象的集合。

Database对象提供一些方法来操纵数据库和创建这些对象。

(1)Execute方法。

执行一个SQL语句。

这个SQL语句不仅可以操作数据库中的数据,还可以是DLL,用来修改数据库的结构。

(2)OpenRecordset方法。

在数据库中执行一个查询,查询可能涉及到表的连接,查询的结果作为一个Recordset对象返回。

(3)CreateQuery方法。

在数据库中创建一个存储过程并创建一个QueryDef对象。

(4)CreateRelation方法。

创建一个Relation对象,定义两个TableDef或QueryDef之间的关系。

(5)CreatTableDef方法。

在数据库中创建一个数据表,并返回一个TableDef对象。

5.Recordset对象Recordset对象是使用最频繁的一个对象,它代表了数据库中一个表或一个查询结果的记录等。

例如下面的语句在数据库的第一表中添加一条记录:For Each tempdb In Workspace(0).DatabasesDebug.Write("databases(x).Name=",)Next还可以在Recordset中任意移动当前的记录的位置,使用的是Recordset对象MoveNext、MovePrevious、MoveFirst和MoveLast方法。

Recordset对象中还包含另一个对象--Field对象,这个对象代表了数据表的一个字段,用这个对象可以访问数据表中的任何一个字段,如:下面的语句把表中当前记录的Name字段值赋给变量sName:Dim db As DAO.Database=ws.OpenDatabase("user","aaa")SName=CStr(db.recordsets(0).Fields("name").value)Source参数可以是一个表名,也可以是一个查询的名字,还可以是一个用来创建Recordset 对象的SQL语句。

这个参数是必须的,而其他的三个参数是可选的。

Type参数是指Recordset的类型,这里有必要说明一下Dynaset(动态集)和Snapshot(快照)之间的区别。

Dynaset这种Recordset对象的功能强大,使用灵活,当Recordset被创建时,只有每个记录的主键被取到且被缓存在本地,由于主键的大小总是小于整条记录的大小,所以Dynaset创建的速度很快。

在Dynaset创建以后,如果要查询记录,则用缓存的主键来进行查询。

相反,Snapshot则是把整条记录都取出来存在本地,因此速度很慢,而且,如果别的用户修改了数据库,本用户将无法看到这种改变。

6.TableDef对象TableDef对象也是一个经常使用的对象,它有两个子对象:一个是Field对象,另一个是Index 对象。

用TableDef对象可以访问单个表的每个字段(Field对象)和表的索引(Index对象)。

TableDef对象的一个重要的方法是CreateField。

CreatField方法用来在表中创建一个新的字段,它的语法为:Field=tabledef.CreateField(fieldname,fieldtype,fieldlength)三个参数分别指明新增字段的字段名,字段类型和字段长度。

对于动态地创建一个新表或动态地修改表的结构时,这个对象是必不可少的。

例如下面的语句创建一个只有字段的新表:7.QueryDef对象QueryDef对象用来定义一个查询。

它有两个对象:一个是Field对象,一个是Parameter对象。

用Database对象的CreateQueryDef方法来创建一个QueryDef对象。

用户可以在Jet对象模型中这样使用QueryDef对象:(1)用QueryDef对象的SQL属性来设置或返回查询的SQL语句的定义;(2)用QueryDef对象的子对象Parameter来设置或返回查询定义的参数;(3)用QueryDef对象的Type属性来设置查询的类型,查询的类型包括:从已有的表中取出记录、创建一个新表、把一个表中的记录插入到另一个表中、删除记录、更新记录等;(4)用对象的MaxRecords属性来限制查询返回的记录数;(5)用对象的ReturnRecords属性取得查询返回的记录数;(6)用对象的Execute方法来执行查询;(7)对象的RecordsAffected属性来返回此查询的所影响的记录数;(8)用对象ODBTimeout来设置查询ODBC数据源时花费的最长时间;(9)用对象的connect属性来连接ODBC数据源进行查询;(10)用对象的OpenRecordset方法来返回Recordset对象,并用此recordset对象来取得查询的结果。

8.Relation对象Relation对象用来定义不同的表中或不同查询中字段之间的关系。

例如,定义一个表中的主键为另一个表的外键,定义一个表中的字段之间的一对一或一对多的关系等等。

用Database 对象的CreateRelation方法来创建一个Relation对象。

9.Field对象Field对象是Jet对象模型中的最底层的对象,它代表了一个表中的一个字段。

可以设置字段的各种属性,如字段类型("Type"属性)、字段长度("Size"属性)、当前记录中字段的值("Value"属性)、字段的缺省值("DefaultValue"属性)、字段是否可以为空("Required"属性)等等。