570 likes | 740 Views
第 9 章 用 DAO 操作数据库. 本章要点: DAO 对象模型 DAO 的各种对象的属性和方法 DAO 的各种对象的创建与使用 事务处理的概念和在 DAO 中实现事务处理的方法 错误处理的概念与错误处理的方法. 9.1 DAO 体系结构与对象模型. 9.1.1 DAO 体系结构. 1 . VB 的用户界面和程序代码 VB 的用户界面是应用系统用来与用户进行交互的界面,主要以窗口的形式出现,用于显示数据供用户查看或修改。 2 . DAO 数据库引擎
E N D
第9章用DAO操作数据库 • 本章要点: • DAO对象模型 • DAO的各种对象的属性和方法 • DAO的各种对象的创建与使用 • 事务处理的概念和在DAO中实现事务处理的方法 • 错误处理的概念与错误处理的方法
9.1 DAO体系结构与对象模型 9.1.1 DAO体系结构
1.VB的用户界面和程序代码 VB的用户界面是应用系统用来与用户进行交互的界面,主要以窗口的形式出现,用于显示数据供用户查看或修改。 • 2.DAO数据库引擎 数据库引擎存在于应用程序和物理数据库文件之间,把用户程序和正在访问的特定数据库隔离开来,从而实现应用程序对数据库的“透明”操作。 • 3.数据库 数据库是包含数据库表的一个或多个文件。
9.1.2 DAO对象模型 • DAO是一个分层的面向对象的数据访问模式,它把对于数据库的操作分为若干层次,每一个层次为一类对象,具体的对象及分层关系如图:
9.1.3 加载数据访问对象DAO • 要使用DAO,首先必须把该对象加载到Visual Basic的工程中,加载方法为:执行【工程】→【引用】命令,将会出现如图9-3所示的“引用”对话框,在该对话框中选中相应的Microsoft DAO对象库,图9-3选中的是“Microsoft DAO 3.6 Object Library”。 • 把“Microsoft DAO 3.6 Object Library”加载到工程中后,就可以使用DAO进行数据库编程了。
9.2 DBEngine对象 9.2.1 常用属性 1.DefaultType属性 2.DefaultPassword 3.DefaultUser 4.IniPath 5.LoginTimeout 6.SystemDB 7.Version
9.2.2 常用方法 1.CreateWorkspace方法 使用格式如下: Set 工作区变量名= CreateWorkspace(name, user, password, type) 2.RepairDatabase方法 该方法的格式如下: DBEngine.RepairDatabase dbname 3.CompactDatabase方法 该方法的格式如下:DBEngine.CompactDatabase olddb, newdb, local, options, password
【例9-1】对当前目录下的“教学”数据库进行压缩,要求压缩后的数据库还是原来的数据库名。 分析:使用CompactDatabase方法可以压缩数据库,但该方法产生的压缩后的数据库为另一个数据库名。可在压缩后,用压缩后的数据库去覆盖原来的数据库,再把压缩后的数据库删除。
9.2.3 集合对象 DBEngine对象包含的主要集合对象有:Rrrors(错误集合)、Properties(属性集合)、Workspaces(工作区集合)。 【例9-2】列出DBEngine对象的所有属性的工作区。 分析:可通过FOR……EACH……IN循环输出DBEngine的Properties集合中的每个属性的属性名,同样可输出DBEngine的Workspaces集合中的每个工作区对象的名称。
9.3 WorkSpace对象 9.3.1 常用属性 1.Name属性 该属性用来设置或返回工作区对象的名字。 2.UseName属性 该属性用来设置或返回Workspace对象的拥有者。 3.Type属性 该属性用来指明Workspace对象操作的数据库类型。 4.IsFrozen属性 表示工作区是否被锁定,为Boolean属性,总是取值False,因为无法锁定一个工作区。
9.3.2 常用方法 1.CreateDatabase方法 该方法的格式如下:Setdatabase=workspace.CreateDatabase(name,locale,options) 【例9-3】在当前目录下建立一个名为“人员管理”的数据库。
2.OpenDatabase方法 该方法的格式为: Setdatabase=workspace.OpenDatabase(name,options,read-only,connect) 【例9-4】以独占且可读可写方式打开当前目录下的名为“教学”的数据库。
9.3.3 连接到数据库 1.用Microsoft Jet 数据库引擎进行连接 【例9-5】使用Microsoft Jet 数据库引擎分别打开Access数据库和“SQLPubs”数据源的Pubs数据库。程序设计界面如9-4所示。
2.用ODBC Direct进行连接 【例9-6】使用ODBC直接与系统数据源“SQLPubs”的Pubs数据库相连。程序的设计界面如图9-6所示,程序的运行界面如图9-7所示。
9.4 Database对象 9.4.1 常用属性 1.CollatingOrder属性 2.Name属性 3.RecordsAffected属性 4.Updatable属性 5.V1xNullBehavior属性 6.QueryTimeout属性
9.4.2 常用方法 1.Close方法 2.Execute方法 3.OpenRecordset方法 4.CreateTableDef方法 5.CreateQueryDef方法 9.4.3 常用集合对象 最常用的集合对象有QueryDefs和TableDefs。其中Containers代表的是字段集合,Indexes代表的是索引集合,QueryDefs代表的是查询集合,TableDefs代表的是表集合。
9.5 TableDef和TableDefs对象 9.5.1 TableDef对象及其创建方法 创建TableDef对象,可使用Database对象的CreateTableDef方法,该方法的格式如下: Settabledef=database.CreatTableDef(name,attributes,source,connect) 9.5.2 TableDef对象的常用属性 1.Attributes属性 2.ValidationRule属性 3.ValidationText属性 4.Name属性
9.5.3 TableDef对象的常用方法 1.CreateField方法 2.CreateIndex方法 3.OpenRecordset方法 9.5.4 TableDefs对象的常用属和方法 1.Append方法 格式如下:TableDefs对象名.Append TableDef变量名 2.Delete方法 格式如下:TableDefs对象名.Delete Tablename
【例9-7】设计一个显示表名和删除表的程序。程序的设计界面如图9-8所示。程序运行时把当前目录下的教学数据库中的所有表名显示在列表框List1中,在Text1文本框中显示表的数量。在列表框中选中一个表名后,单击“删除”按钮将删除对应的表。 题意分析:为了在运行时在列表框中显示数据库中的所有表名,可通过一个For Each…In循环,把数据库的TableDefs集合中的每个TableDef对象的Name属性添加到列表框中,为显示TableDef中表的数量,可使用TableDefs的Count属性,为删除表,可使用TableDefs和Delete方法。
9.6 Field和Fields对象 9.6.1 Field对象及其创建方法 添加字段的一般方法为: (1)关闭所有基于该表的记录集; (2)用表对象的CreateField方法创建一个新的Field对象; (3)用字段集合对象Fields的Append方法把新建的Field对象加到Fields集合中。 TableDef对象的CreateField方法的格式如下: Setfield=tabledef.CreateField(fieldname,fieldtype,fieldsize)
【例9-8】在当前目录下创建一个新数据库“图书管理.mdb”,并为该数据库创建一个名为“图书”的表,该表由三个字段组成:书号(文本型,15位)、书名(文本型、20位)、单价(整型)。
9.6.2 Field对象的常用属性 1.AllowZeroLength属性 2.Attributes属性 3.DataUpdatable属性 4.DefaultValue属性 5.FieldSize属性 6.Name属性 7.OrdialPosition属性 8.Required属性 9.Size属性 10.Type属性 11.ValidationRule属性 12.ValidationText属性 13.ValidateOnSet属性
9.6.3 Fields对象的常用属性和方法 1.Append方法 具体的使用方法如下:OFields.Append oField2.Delete方法 具体的使用方法如下:OFields.Delete Fieldname 【例9-9】设计一个显示和删除数据库中的表和字段的程序。程序的设计界面如图9-12所示。程序运行时,把当前目录下名为“教学”数据库中的表名显示在List1列表框中,把表的数量显示在文本框Text1中,在List1中单击选中表名时,将把选中表的所有字段名显示在列表框List2中,选中表的字段数显示在文本框Text2中。此时若按“删除表”按钮将删除选中的表,按“删除字段”按钮将删除选中的字段。
题意分析:显示数据库中的表名、表的数量及删除表的方法可参见例9-7。为在运行时在列表框中显示选中表的所有字段名,可通过一个For Each…In循环,把表的Fields集合中的每个Field对象的Name属性添加到列表框中,为显示Fields中字段对象的数量,可使用集合对象Fields的Count属性,为删除字段,可使用Fields对象的delete方法。
9.7 Index和Indexes对象 9.7.1 Index对象及其创建方法 创建索引可使用TableDef对象的CreateIndex方法来实现,该方法的使用格式如下: Set index=tabledef.Createlndex(name) 可使用索引对象的CreateField方法来创建索引字段,该方法的使用格式如下: Set IndexField=Index.CreateField(name) 为表创建索引一般要经过以下步骤: (1)调用表对象的CreateIndex方法创建索引名; (2)为该索引对象创建索引字段,有几个字段就创建几个字段; (3)调用索引对象下的集合对象Fields的Append方法,把索引字段依次添加进索引对象的Fields集合中; (4)调用表的索引集合的Append方法把索引对象添加到表的索引集合Indexes中。
【例9-10】为例9-8创建的数据库“图书管理”中的表“图书”创建一个名为SM的索引,该索引按字段“书号”进行升序索引。 题意分析:首先要打开相应数据库中的相应表,然后按照创建索引的步骤为相应表创建索引。
9.7.2 Index对象的常用属性 1.DistinctCount属性 2.Foreign属性 3.IgnoreNulls属性 4.Name属性 5.Primary属性 6.Required属性 7.Unique属性
9.7.3 Index对象的常用方法 Index对象的常用方法有CreateField,该方法用来创建索引字段,使用方法见9.7.1。 9.7.4 Indexes对象的常用属性和方法1.Append方法具体的使用方法如下: Oindexes.Append oindex 2.Delete方法具体的使用方法如下: OIndexes.Delete Indexname
题意分析:显示数据库中的表名、表的数量及删除表的方法可参见例9-7。为在运行时在列表框中显示选中表的所有索引名,可通过一个For Each…In循环,把表的Indexes集合中的每个Index对象的Name属性添加到列表框中,为显示Indexes中索引对象的数量,可使用集合对象Indexes的Count属性,为删除索引,可使用Indexes对象的delete方法。
9.8 QueryDef和QueryDefs对象 9.8.1 QueryDef对象及其创建方法 要创建QueryDef对象,可使用Database对象的CreateQueryDef方法。该方法的使用格式如下: setOQueryDef=ODatabase.CreateQueryDef(QueryDefname,Sqlstr)
【例9-12】为当前目录下的“教学”数据库创建三个查询,查询名称分别为:“自动化学生”、“学生必修课”和“课程01”。其中“自动化学生”查询的功能是“列出自动化专业的全部学生的学号、姓名和年级”,“学生必修课”查询的功能是“查询出所有学生的必修课的学习情况,查询结果中包含学号、姓名、课号和成绩”,“课程01”查询的功能是“列出选修‘01’号课的学生姓名及成绩”。
9.8.2 QueryDef对象的常用属性 1.MaxRecords属性 2.Name属性 3.RecordAffected属性 4.SQL属性 5.Type属性 6.Updatable属性
9.8.3 QueryDef对象的常用方法 1.OpenRecordset方法 该方法执行查询并产生一个记录集 2.Execute方法 该方法用来运行SQL查询,有一个可选的参数,该方法使用的场合不多,此书不再介绍。
9.8.4 QueryDefs对象的常用属性和方法 该方法的使用格式如下: OQueryDefs.Delete QueryDefname 【例9-13】设计一个显示表的查询名和删除查询的程序。程序的设计界面如图9-18所示。程序运行时把当前目录下的“教务管理”数据库中的所有查询名显示在列表框List1中,在Text1文本框中显示查询的数量。在列表框中选中一个查询后,单击“删除”按钮将删除对应的查询。 题意分析:为在运行时在列表框中显示数据库中的所有查询名,可通过一个For Each…In循环,把数据库的QueryDefs集合中的每个QueryDef对象的Name属性添加到列表框中,为显示QueryDefs中查询的数量,可使用QueryDefs的Count属性,为删除查询,可使用QueryDefs的Delete方法。
9.9 Relation对象 9.9.1 Relation对象的常用属性1.Attributes属性 2.Table属性 3.ForeignTable属性 4.Name属性 9.9.2 Relation对象的常用方法 Relation对象有一个方法CreateField,该方法用来创建建立关系的字段。创建的字段名的名称必须是主表中的建立关系的字段名称,并且建立的字段应添加到Relation对象的Fields集合中。
9.9.3 Relation对象的建立方法 建立一个关系一般需经过以下几骤: (1)打开数据库; (2)调用数据库对象CreateRelation方法创建一个关系(主表中的相关字段必须建立了唯一索引); (3)调用关系变量的CreateField方法创建一个关系字段; (4)把创建的关系字段添加到关系的集合变量Fields中; (5)设置关系字段对象的ForeignName属性为从表的相应字段; (6)把建立的关系添加到数据库的关系集合中。
【例9-14】为教务管理数据库的“课程”表和“必修课成绩”建立关系,关联的字段为“课号”,关系的类型为“级联更新”,已知“课程”表的内容如图9-20所示,“必修课成绩”表的内容如图9-21所示,且“课程”表已按照“课号”进行了索引(无重复)。 题意分析:“课程”表应为主表,“必修课成绩”表应为从表,关系字段为“课号”。
9.10 RecordSet对象 9.10.1 RecordSet对象的概念和类型 RecordSet对象是一批记录的集合,在结构上是由一系列的记录和字段组成。RecordSet对象中的记录可以直接从数据库的表中取得,也可以通过查询返回。 根据对记录的存取和控制方式,RecordSet对象可以分成五种基本类型,分别是表型、动态集类型、快照型、仅向前型和动态类型。
9.10.2 RecordSet对象的创建 使用Database对象创建记录集的格式如下: Set recordset=database.OpenRecordset(source, type,options,Lockedits) 使用TableDef对象创建记录集的格式如下: Set recordset=TableDef.OpenRecordset(type, options,Lockedits) 使用QueryDef对象创建记录集的格式如下: Set recordset=QueryDef.OpenRecordset(type, options,Lockedits)
【例9-15】编写一个程序,把“教务管理”数据库中的“学生”表中的所有学生的姓名显示在窗口中的List1列表框中,把“课程”表中的所有课程名显示在List2列表框中。已知“教务管理”数据库已经在当前目录下,要求使用Recordset对象来实现。程序的设计界面如图9-23所示。 题意分析:为使在程序一开始运行时就在列表框中显示要求的内容,可在窗体的Load事件中进行编程。显示某表中的内容,可把该表以记录集的形式打开。为把记录集中的某一字段内容列出来,可通过一个循环,在循环中引用该字段的Value属性就得到当前记录的值,然后通过调用MoveNext方法把记录指针移到下一条记录,循环的结束条件应该是记录指针移到记录集的末尾。
9.10.3 RecordSet对象的常用属性 1.Bookmark属性 2.Bookmarkable属性 3.LastModified属性 4.DateCreated属性 5.LastUpdated属性 6.Filter属性 7.Sort属性 8.Name属性 9.AbsolutePosition属性 10.PercentPosition属性 11.Restartable属性 12.Transactions属性 13.Type属性 14.Updatable属性
9.10.4 RecordSet对象的常用方法 1.CancelUpdate方法 该方法的使用格式如下: Recordset.cancelUpdate 2.Clone方法 该方法的使用格式如下:Set desRecordset= resRecordset.Clone (LockType) 3.GetRows方法 4.Requery方法 该方法的使用格式如下: Recordset.requery
9.11 DAO事务处理 9.11.1 事务的概念与VB中的事务处理方法1.事务的概念 所谓事务,是指捆绑在一起的一组操作,在应用程序中,一个事务作为一个整体进行执行,被看作是一个任务单元。 2.事务处理方法 (1)BeginTrans方法 该方法的格式如下: Workspace.BeginTrans (2)CommitTrans方法该方法的格式如下: Workspace.CommitTrans (3)Rollback方法 该方法的格式如下: Workspace.Rollback