1 / 27

第 7 章 用 VBA 访问 Access 数据库

第 7 章 用 VBA 访问 Access 数据库. 总结和作业、实验任务. 本章内容. 记录集 概述 在 Access 中引用 ADO 对象 引用记录字段 浏览记录 用 ADO 技术实现复杂查询. 7.1 记录集概述. 7.1.1 ADO 的 9 个对象 7.1.2 了解记录集. 7.1.1 ADO 的 9 个对象. ADO : ActiveX Data Objects Access 内嵌的 VBA 是用 ADO 技术开发数据库应用的主要工具 ADO 对象模型有 9 个对象:

beau-cherry
Download Presentation

第 7 章 用 VBA 访问 Access 数据库

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第7章用VBA访问Access数据库

  2. 总结和作业、实验任务 本章内容 • 记录集概述 • 在Access中引用ADO对象 • 引用记录字段 • 浏览记录 • 用ADO技术实现复杂查询

  3. 7.1 记录集概述 7.1.1 ADO的9个对象 7.1.2 了解记录集

  4. 7.1.1 ADO的9个对象 • ADO:ActiveX Data Objects • Access内嵌的VBA是用ADO技术开发数据库应用的主要工具 • ADO对象模型有9个对象: • Connection、Recordset、Record、Command、Parameter、Field、Property、Stream、Error • 常用对象:Connection、Command、Recordset

  5. 7.1.1 ADO的9个对象 • Connection对象:ADO对象模型中最高级的对象,实现应用程序与数据源的连接。 • Command对象:主要作用是在VBA中通过SQL语句访问、查询数据库中的数据。可以实现Recordset对象不能完成的操作,如创建数据表、修改表结构、删除表等。 • Recordset对象的功能最常用、最重要

  6. 7.1.2 了解记录集 • 记录集(Recordset):对表执行查询操作时,返回的一组特定记录。 • 用记录集可执行的操作:对表中的数据进行查询和统计,在表中添加、更新或删除记录。 • 记录集是一个对象,它包括记录和字段,具有其特定的属性和方法,利用这些属性和方法就可以编程处理数据库中的记录。

  7. 7.2 在Access中引用ADO对象 • 应用程序中的ADO引用:声明Connection对象→创建Recordset对象→编程完成各种数据访问操作 7.2.1 声明Connection对象 7.2.2 声明与打开Recordset对象 7.2.3 关闭Recordset和Connection对象

  8. 与当前数据库连接 7.2.1 声明Connection对象 (1) 声明一个Connection对象 (2) 初始化Connection对象(决定Connection对 象与哪个数据库相连接) 例如: Dim cnGraduateAs ADODB.Connection Set cnGraduate=CurrentProject.Connection

  9. 7.2.2 声明与打开Recordset对象 (1) 声明Recordset对象 (2) 创建Recordset对象实例 (3) 打开Recordset对象 例如: DimrsStudentsAs ADODB.Recordset SetrsStudents=NewADODB.Recordset rsStudents.Open "研究生", cnGraduate, , , adCmdTable 参数占位符 表名称 前面声明的Connection对象 打开的是表对象

  10. 7.2.3 关闭Recordset和Connection对象 • 方法:执行Recordset 对象和Connection对象的Close方法 → 将对象设置为Nothing 例如: rsStudents.Close cnGraduate.Close SetrsStudents=Nothing SetcnGraduate=Nothing • 上述语句不是必须的。应用程序终止运行时,系统会自动关闭并清除这两个对象。

  11. 7.3 引用记录字段 • 任何对记录集的访问都是针对当前记录进行的。打开记录集时默认的当前记录为第1条记录。 • 引用记录的字段: • 直接在记录集对象中引用字段名称 Code=rsStudents!学号 • 使用记录集对象的Fields(n)属性。 n是记录中字段从左到右的排列序号,第一个字段的序号为0。 Code=rsStudents.Fields(0)

  12. 7.3 引用记录字段 [例7-1] 建立名为ADO的模块,编写如下过程。运行该过程后,输出对话框显示“导师”表中第一位教师的编号和姓名。

  13. 7.3 引用记录字段 • 记录集更多的应用是在窗体对象上:建立一个空白窗体→设计各个控件→编程引用记录集当前记录的相关字段或将字段的值通过控件显示 • 注意:如果涉及数据访问的事件过程不止一个,可在代码窗口的通用段定义Connection对象和Recordset对象,然后在Form_Load事件过程中完成数据库连接和数据表的打开。

  14. 7.3 引用记录字段 [例7-2]:设计窗体,显示第一位导师的编号和姓名 运行: 分别单击“导师编号”和“导师姓名”按钮 窗体设计视图 (删除导航按钮)

  15. 7.3 引用记录字段 [例7-2]窗体程序代码

  16. 7.4 浏览记录 • Recordset记录集对象提供了4种记录指针的移动方法 • MoveFirst 记录指针移到第一条记录 • MoveNext 记录指针移到当前记录的下一条记录 • MovePrevious 记录指针移到当前记录的上一条记录 • MoveLast 记录指针移到最后一条记录

  17. 7.4 浏览记录 • Recordset记录集的BOF和EOF属性用于判断记录指针是否处于有记录的正常位置 • 记录指针将指向最后一条记录之后,EOF属性为True • 记录指针将指向第一条记录之前,BOF属性为True • BOF和EOF属性的值均为True,表示记录集为空

  18. 7.4 浏览记录 [例7-3] 对例7-2进行修改 增加如下事件过程代码: Private Sub Command3_Click() ‘单击“下一个记录”按钮 rsTeacher.MoveNext End Sub

  19. 7.4 浏览记录 • 上面的过程隐含错误:移至最后一条记录后无法再下移指针,将出现运行错误信息框。 • 两种纠正错误的方法: • 如果记录集的EOF属性为True,就回到第一条记录 • 如果记录集的EOF属性为True,就回到最后一条记录

  20. 7.4 浏览记录 Private Sub Command3_Click() rsTeacher.MoveNext If rsTeacher.EOF Then rsTeacher.MoveFirst End If End Sub 方法1:若记录集的EOF属性为True,则回到首记录 Private Sub Command3_Click() rsTeacher.MoveNext If rsTeacher.EOF Then rsTeacher. MoveLast End If End Sub 方法2:若记录集的EOF属性为True,则回到末记录

  21. 7.4 浏览记录 • 方法2的程序还将运行出错。因为Recordset对象有一个名为LockType的属性,默认值为adLockReadOnly,此时只能浏览记录数据,记录的移动方式也只能是MoveNext和MoveFirst,不能执行MoveLast和MovePrevious操作。

  22. 7.4 浏览记录 • 修改:将该记录集对象的LockType属性设置成adLockPessimistic(保守式锁定) • 编辑数据时即锁定数据源记录,直到数据编辑完成才释放。 rsTeacher.LockType = adLockPessimistic rsTeacher.Open "导师", cnGraduate, , , adCmdTable

  23. 7.4 浏览记录 • 如果数据表中没有记录,即BOF和EOF同时为True,就不能引用表中的数据。 • 将单击“导师姓名”按钮的事件过程改写如下 Private Sub Command2_Click() If rsTeacher.BOF = True And rsTeacher.EOF = True Then Text1.Value = "" Else Text1.Value = rsTeacher!姓名 End If End Sub

  24. 7.6用ADO技术实现复杂查询 [例7-8] 在ADO模块中建立Sex过程:统计并在输出对话框中显示男、女研究生人数比。要求以人数多的一方为1、放在右侧、保留小数两位。 程序分析:先遍历全部记录,分别统计出男、女研究生人数。如果男生人数多于女生,则男生人数为1,女生人数改为女生人数除以男生人数;反之亦然。

  25. 7.6 用ADO技术实现复杂查询 Sub Sex() (定义对象、完成与数据库的连接、打开研究生表、定义变量) Student.MoveFirst Do While NotStudent.EOF'统计男、女研究生人数 If Student!性别 = "男" Then Boy = Boy + 1 If Student!性别 = "女"Then Girl = Girl + 1 Student.MoveNext Loop If Girl <= Boy Then'以男生人数为1 MsgBox "女:男=" & Format(Girl / Boy, "0.00") & ":1" Else'以女生人数为1 MsgBox "男:女=" & Format(Boy / Girl, "0.00") & ":1" End If End Sub

  26. 本章总结 • 记录集概述 • ADO、Connection对象、Recordset对象 • 在Access中引用ADO对象 • 引用记录字段 • 浏览记录 • MoveFirst、MoveNext、MovePrevious、MoveLast • EOF、BOF • 用ADO技术实现复杂查询

  27. 实验6-用VBA访问Access数据库 • 第7章课本上的例题 • 例7-3、例7-8 • 以“用VBA访问Access数据库–班级姓名.mdb”提交实验成果

More Related