资源预览内容
第1页 / 共35页
第2页 / 共35页
第3页 / 共35页
第4页 / 共35页
第5页 / 共35页
第6页 / 共35页
第7页 / 共35页
第8页 / 共35页
第9页 / 共35页
第10页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据库原理及应用(Access2003),第9章 VBA数据库编程,第9章 VBA数据库编程,9.1 数据库引擎及其接口 9.2 数据访问对象 9.2.1 DAO模型结构 9.2.2 主要的DAO对象 9.2.3 利用DAO访问数据库 9.3 ActiveX数据对象 9.3.1 ADO模型结构 9.3.2 主要ADO对象的使用 9.3.3利用ADO访问数据库,第9章 VBA数据库编程,概要介绍: 前面已经介绍了模块和VBA程序设计基础知识,包括VBA面向对象程序设计初步知识。实际上,要想快速、有效地管理好数据,开发出更具实用价值的 Access 数据库应用程序,还应当了解和掌握 VBA 的数据库编程方法。 本章我们首先介绍数据库访问接口,然后介绍Access支持的DAO和ADO两种数据库编程方法。,9.1 数据库引擎及其接口,VBA是通过Microsoft Jet数据库引擎工具来支持对数据库的访问。所谓数据库引擎 实际上是一组动态链接库(DLL),当程序运行时被链接到 VBA 程序而实现对数据库的数据访问功能。数据库引擎是应用程序与物理数据库之间的桥梁,它以一种通用接口的方式, 使各种类型物理数据库对用户而言都具有统一的形式和相同的数据访问与处理方法。,9.1 数据库引擎及其接口,在VBA中主要提供了3种数据库访问接口: (1)开放数据库互连应用编程接口(Open Database Connectivity API,ODBC API)。目前 Windows 提供的 32 位 ODBC 驱动程序对每一种客户/服务器 关系型数据库管理系统、最流行的索引顺序访问方法(ISAM)数据库(Jet、dBase、Foxbase 和 FoxPro)、扩展表(Excel)和定界文本文件都可以操作。在 Access 应用中,直接使用 ODBC API需要大量VBA函数原型声明(Declare)和一些繁琐、低级的编程,因此,实际编程很少直接进行 ODBC API的访问。 (2)数据访问对象(Data Access Objects,DAO)。DAO 提供一个访问数据库的对象模型。利用其中定义的一系列数据访问对象,例如,Database、QueryDef、RecordSet 等对象,实现对数据库的各种操作。,9.1 数据库引擎及其接口,(3)Active数据对象(ActiveX Data Objects,ADO)。ADO是基于组件的数据库编程接口,是一个和编程语言无关的 COM 组件系统。使用它可以方便地连接任何符合 ODBC 标准的数据库。ADO支持的数据资源范围比DAO广泛。,9.1 数据库引擎及其接口,VBA通过数据库引擎可以访问的数据库有以下3种类型。 (1)本地数据库:即Access数据库。 (2)外部数据库:指所有的索引顺序访问方法(ISAM)数据库。 (3)ODBC数据库:符合开放数据库连接(ODBC)标准的客户/服务器数据库,例如,Oracle、Microsoft SQL Server等。,9.2 数据访问对象,数据访问对象(DAO)包含了很多对象和集合,通过Jet引擎来连接Access数据库和其他的ODBC数据库。 DAO模型为进行数据库编程提供了需要的属性和方法。利用DAO可以完成对数据库的创建,如创建表、字段和索引,完成对记录的定位和查询以及对数据库的修改和删除等。 数据访问对象完全在代码中运行,使用代码操纵Jet引擎访问数据库数据,能够开发出更强大更高效的数据库应用程序。使用数据访问对象开发应用程序,使数据访问更有效,同时对数据的控制更灵活更全面,给程序员提供了广阔的发挥空间。,9.2 数据访问对象,有图所示为DAO模型分层结构简图。,9.2.1 DAO模型结构,9.2 数据访问对象,DAO对象模型是一个分层的树型结构,它包含了一个复杂的可编程数据关联对象的层次,其中DBEngine对象处于最顶层,它是模型中唯一不被其它对象所包含的数据库引擎本身。层次低的一些对象,如Workspace(s)、 Database(s) 、QueryDef(s) 、RecordSet(s)和 Field(s)是DBEngine对象下的对象层,其下的各种对象分别对应被访问的数据库的不同部分。在程序中设置对象变量,并通过对象变量来调用访问对象方法、设置访问对象属性,这样就实现了对数据库的各种访问操作。,9.2.1 DAO模型结构,9.2 数据访问对象,1. DBEngine对象 在DAO的分层结构中可以看到,DBEngine对象是顶层对象,它包含了其他所有的数据访问对象和集合,是惟一不被其他对象所包含的数据库访问对象,实际上,DBEngine 对象就是 Jet 数据库引擎本身。 DBEngine对象包含一个Workspace对象集合,该集合由一个或多个Workspace对象组成。如果要建立一个新的 Workspace 对象,则应当使用 CreateWorkspace 方法。该方法的使用语法如下: Set myWsDBEngine.CreateWorkspaces(name,user,password,type),9.2.2 主要的DAO对象,9.2 数据访问对象,其中,myWs是一个Workspace对象。name指定工作区的名字。user设置该工作区的用户名。password 是使用者的密码。type 是用于确定即将创建的 Workspace 对象的类型的可选参数,使用 DAO 可以创建两种类型的 Workspace 对象,即 Jet 型和 ODBC 型,对应这两种类型的常量分别是:dbUseJet 和 dbUseODBC。 Dim ws1 As Workspace Set ws1 = DBEngine.CreateWorkspaces(“ws1“,“zyy“,“ “ ),9.2.2 主要的DAO对象,9.2 数据访问对象,2. Workspace对象 在DBEngine对象中有一个Workspace对象集合,该集合包含了当前可使用的Workspace 对象。Workspace为用户定义了一个有名字的会话区。Workspace对象定义了使用何种方式与连接数据。在DAO中,可以使用Microsoft Jet引擎或 ODBCDirect中的任意一种,视数据源而定,而连接方式的实现,则可以通过Workspace 对象来定义。Workspace 对象还提供了事务处理,为保证数据库的完整性提供了支持。引用 Workspace 对象的通常方法是使用 Workspaces 集合,对象在集合中的索引从0开始。在 Workspaces 集合中引用对象,既可以通过在集合中的索引来引用,也可以通过对象的名字来引用。,9.2.2 主要的DAO对象,9.2 数据访问对象,3. Database对象 使用DAO编程,Database对象及其包含的对象集是最常用的。Database对象代表了一个打开的数据库,所有对数据库的操作都必须先打开数据库。Workspace对象包含一个Database 对象集合,该对象集合包含了若干个 Database 对象。Database对象包含TableDef、QueryDef、Container、Recordset和Relation 5个对象集合。 使用Database对象,可以定义一个Database变量,也可以通过Workspace对象中的Database 对象集来引用。使用 CreateDatabase 方法和 OpenDatabase 方法将返回一个数据库对象,同时该数据库对象自动添加到 Database 对象集合中。,9.2.2 主要的DAO对象,9.2 数据访问对象,3. Database对象 使用DAO编程,Database对象及其包含的对象集是最常用的。Database对象代表了一个打开的数据库,所有对数据库的操作都必须先打开数据库。Workspace对象包含一个Database 对象集合,该对象集合包含了若干个 Database 对象。Database对象包含TableDef、QueryDef、Container、Recordset和Relation 5个对象集合。 使用Database对象,可以定义一个Database变量,也可以通过Workspace对象中的Database 对象集来引用。使用 CreateDatabase 方法和 OpenDatabase 方法将返回一个数据库对象,同时该数据库对象自动添加到 Database 对象集合中。,9.2.2 主要的DAO对象,9.2 数据访问对象,说明: 在使用Database变量时,应当使用Set关键字为该变量赋值。 Database对象的常用方法如下: (1)CreateQueryDef方法 该方法可创建一个新的查询对象。其使用语法如下: Set querydef=database.CreateQueryDef(name,sqltext) 如果name参数不为空,表明建立一个永久的查询对象;若name参数为空,则会创建一个临时的查询对象。sqltext 参数是一个 SQL 查询命令。,9.2.2 主要的DAO对象,9.2 数据访问对象,(2)CreateTableDef方法 该方法用于创建一个TableDef对象。其语法格式如下: Set table = database.CreateTableDef(name,attribute,source,connect) 其中,table是之前已经定义的表类型的变量。database是数据库类型的变量,它将包含新建的表。name 是设定新建表的名字。attribute 用来指定新创建表的特征。source用来指定外部数据库表的名字。connect 字符串变量包含一些数据库源信息。最后3个参数在访问部分数据库表时才会用到,一般可以默认这几项。,9.2.2 主要的DAO对象,9.2 数据访问对象,(3)Execute方法 该方法执行一个动作查询。 (4)OpenRecordset方法 该方法创建一个新的 Recordset 对象,并自动将该对象添加到Database 对象的Recordset 记录集合中去。其使用语法如下 Set recordset=database.OpenRecordset(source,type,options,lockedits) 其中,source是记录集的数据源,可以是该数据库对象对应数据库的表名,也可以是SQL 查询语句。如果 SQL 查询返回若干个记录集,使用 Recordset 对象的 NextRecordset方法来访问各个返回的记录集。,9.2.2 主要的DAO对象,9.2 数据访问对象,type 指定新建的 Recordset 对象的类型,共有以下几种类型: dbOpenTable 表类型。 dbOpenDynaset 动态集类型。 dbOpenSnapshot 快照类型。 dbOpenForwardOnly 仅向前类型。 dbOpenDynamic 动态类型。 一般如果source是本地表,则type的默认值为表类型。,9.2.2 主要的DAO对象,9.2 数据访问对象,options指定新建的Recordset对象的一些特性,常用的有以下几种: dbAppendOnly 只允许对打开表中的记录进行添加,不允许删除或修改记录。这个特性只能在动态集类型中使用。 dbReadOnly 只读特性,赋予此特性后,用户不能对记录进行修改或删除。 DbSeeChanges 如果一个用户要修改另一个正在编辑的数据,则产生错误。 dbDenyWrite 禁止其他用户修改或添加表中的记录。 dbDenyRead 禁止其他用户读表中记录。 lockedits控制对记录的锁定,一般可以忽略。,9.2.2 主要的DAO对象,9.2 数据访问对象,(5)Close方法 该方法将数据库对象从数据库集合中移去。如果在数据库对象中,有打开的记录集对象,使用该方法会自
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号