Access-VBA数据库编程_第1页
Access-VBA数据库编程_第2页
Access-VBA数据库编程_第3页
Access-VBA数据库编程_第4页
Access-VBA数据库编程_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选课件1 精选课件2 精选课件3 精选课件4 nADO:ActiveX Data Objects nAccess内嵌的内嵌的VBA是用是用ADO技术开发数据库应技术开发数据库应 用的主要工具用的主要工具 nADO对象模型有对象模型有9个对象:个对象: Connection、Recordset、Record、Command、 Parameter、Field、Property、Stream、Error 常用对象:常用对象:Connection、Command、Recordset 精选课件5 nConnection对象:对象:ADO对象模型中最高级的对对象模型中最高级的对 象,实现应用程序与数据源

2、的连接。象,实现应用程序与数据源的连接。 nCommand对象:主要作用是在对象:主要作用是在VBA中通过中通过SQL 语句访问、查询数据库中的数据。语句访问、查询数据库中的数据。 nRecordset对象:存储访问表和查询对象返回的对象:存储访问表和查询对象返回的 记录。使用该对象,可以浏览记录、修改记录、记录。使用该对象,可以浏览记录、修改记录、 添加新的记录或者删除特定的记录。添加新的记录或者删除特定的记录。 Recordset对象的功能最常用、最重要对象的功能最常用、最重要 精选课件6 nADO的的3个对象之间互有联系:个对象之间互有联系: Command对象和对象和Recordset

3、对象依赖于对象依赖于Connection 对象的连接;对象的连接; Command对象结合对象结合SQL命令可以取代命令可以取代Recordset对对 象,但远没有象,但远没有Recordset对象灵活、实用;对象灵活、实用; Recordset对象它只能实现数据表内记录集操作,无对象它只能实现数据表内记录集操作,无 法完成表和数据库的数据定义操作;法完成表和数据库的数据定义操作; 数据定义操作一般需通过数据定义操作一般需通过Command对象用对象用SQL命令命令 完成。本章用完成。本章用DoCmd对象代替对象代替Command对象对象。 精选课件7 n记录集记录集(Recordset):对

4、表执行查询操作时,返:对表执行查询操作时,返 回的一组特定记录。回的一组特定记录。 n用记录集可执行用记录集可执行的操作的操作:对表中的数据进行查询:对表中的数据进行查询 和统计,在表中添加、更新或删除记录和统计,在表中添加、更新或删除记录。 n记录集是一个对象,它包括记录和字段,具有其记录集是一个对象,它包括记录和字段,具有其 特定的属性和方法,利用这些属性和方法就可以特定的属性和方法,利用这些属性和方法就可以 编程处理数据库中的记录。编程处理数据库中的记录。 精选课件8 n应用程序中的应用程序中的ADO引用:声明引用:声明Connection对象对象 创建创建Recordset对象对象编程

5、完成各种数据访问编程完成各种数据访问 操作操作 精选课件9 (1) 声明一个声明一个Connection对象对象 (2) 初始化初始化Connection对象(决定对象(决定Connection对对 象与哪个数据库相连接)象与哪个数据库相连接) 例如:例如: Dim cnGraduate As ADODB.Connection Set cnGraduate=CurrentProject.Connection 与当前数据库连接与当前数据库连接 精选课件10 (1) 声明声明Recordset对象对象 (2) 创建创建Recordset对象实例对象实例 (3) 打开打开Recordset对象对象

6、例如:例如: Dim rsStudents As ADODB.Recordset Set rsStudents=New ADODB.Recordset rsStudents.Open 研究生研究生, cnGraduate, , , adCmdTable 前面声明的前面声明的 Connection对象对象 表名称表名称 打开的是表对象打开的是表对象 参数占位符参数占位符 精选课件11 n方法:执行方法:执行Recordset 对象和对象和Connection对象对象 的的Close方法方法 将对象设置为将对象设置为Nothing 例如:例如: rsStudents.Close cnGraduat

7、e.Close Set rsStudents=Nothing Set cnGraduate=Nothing n上述语句不是必须的。应用程序终止运行时,系上述语句不是必须的。应用程序终止运行时,系 统会自动关闭并清除这两个对象。统会自动关闭并清除这两个对象。 精选课件12 n任何对记录集的访问都是针对当前记录进行的。任何对记录集的访问都是针对当前记录进行的。 打开记录集时默认的当前记录为第打开记录集时默认的当前记录为第1条记录。条记录。 n引用记录的字段:引用记录的字段: 直接在记录集对象中直接在记录集对象中引用字段名称引用字段名称,如,如 Code=rsStudents!学号学号 若记录集字段

8、名包含空格,或者字段名是一个保留字,若记录集字段名包含空格,或者字段名是一个保留字, 则引用时必须将该字段名用方括号括起来。则引用时必须将该字段名用方括号括起来。 使用记录集对象的使用记录集对象的Fields(n)属性。属性。n是记录中字段从是记录中字段从 左到右的排列序号,第一个字段的序号为左到右的排列序号,第一个字段的序号为0。如。如 Code=rsStudents.Fields(0) 记录集对象与字段名间的连接符记录集对象与字段名间的连接符 精选课件13 例例7-1 建立名为建立名为ADO的模块,编写如下过程。运的模块,编写如下过程。运 行该过程后,输出对话框显示行该过程后,输出对话框显

9、示“导师导师”表中第一表中第一 位教师的编号和姓名。位教师的编号和姓名。 精选课件14 n记录集更多的应用是在窗体对象上:建立一个空记录集更多的应用是在窗体对象上:建立一个空 白窗体白窗体设计各个控件设计各个控件编程引用记录集当前记编程引用记录集当前记 录的相关字段或将字段的值通过控件显示录的相关字段或将字段的值通过控件显示 n注意:如果涉及数据访问的事件过程不止一个,注意:如果涉及数据访问的事件过程不止一个, 可在代码窗口的通用段定义可在代码窗口的通用段定义Connection对象和对象和 Recordset对象,然后在对象,然后在Form_Load事件过程事件过程 中完成数据库连接和数据表

10、的打开。中完成数据库连接和数据表的打开。 精选课件15 例例7-2 运行:分别单击运行:分别单击“导师导师 编号编号”和和“导师姓名导师姓名” 按钮按钮 窗体设计视图窗体设计视图 (删除导航按钮删除导航按钮) 精选课件16 例例7-2窗体程序代码窗体程序代码 精选课件17 nRecordset记录集对象提供了记录集对象提供了4种记录指针的移动方法种记录指针的移动方法 MoveFirst 记录指针移到第一条记录记录指针移到第一条记录 MoveNext 记录指针移到当前记录的下一条记录记录指针移到当前记录的下一条记录 MovePrevious 记录指针移到当前记录的上一条记录记录指针移到当前记录的

11、上一条记录 MoveLast 记录指针移到最后一条记录记录指针移到最后一条记录 nRecordset记录集的记录集的BOF和和EOF属性用于判断记录指针属性用于判断记录指针 是否处于有记录的正常位置是否处于有记录的正常位置 记录指针将指向最后一条记录之后,记录指针将指向最后一条记录之后,EOF属性为属性为True 记录指针将指向第一条记录之前,记录指针将指向第一条记录之前,BOF属性为属性为True BOF和和EOF属性的值均为属性的值均为True,表示记录集为空,表示记录集为空 精选课件18 例例7-3 对例对例7-2进行修改进行修改 增加如下事件过程代码:增加如下事件过程代码: Priva

12、te Sub Command3_Click() 单击单击“下一个记录下一个记录”按按 钮钮 rsTeacher.MoveNext End Sub 精选课件19 n上面的过程隐含错误:移至最后一条记录后无法上面的过程隐含错误:移至最后一条记录后无法 再下移指针,将出现运行错误信息框。再下移指针,将出现运行错误信息框。 n两种纠正错误的方法:两种纠正错误的方法: 如果记录集的如果记录集的EOF属性为属性为True,就回到第一条记录,就回到第一条记录 如果记录集的如果记录集的EOF属性为属性为True,就回到最后一条记录,就回到最后一条记录 Private Sub Command3_Click()

13、单击单击“下一个记录下一个记录”按钮按钮 rsTeacher.MoveNext End Sub 精选课件20 Private Sub Command3_Click() rsTeacher.MoveNext If rsTeacher.EOF Then rsTeacher.MoveFirst End If End Sub 方法方法1:若记录:若记录 集的集的EOF属性为属性为 True,则回到首,则回到首 记录记录 方法方法2:若记录:若记录 集的集的EOF属性为属性为 True,则回到末,则回到末 记录记录 Private Sub Command3_Click() rsTeacher.MoveN

14、ext If rsTeacher.EOF Then rsTeacher. MoveLast End If End Sub 精选课件21 n方法方法2的程序还将运行出错。因为的程序还将运行出错。因为Recordset对象有一个对象有一个 名为名为LockType的属性,默认值为的属性,默认值为adLockReadOnly, 此时只能浏览记录数据,记录的移动方式也只能是此时只能浏览记录数据,记录的移动方式也只能是 MoveNext和和MoveFirst。 n要实现记录指针的要实现记录指针的4种移动操作,完成记录的添加、删改种移动操作,完成记录的添加、删改 或更新,必须在使用或更新,必须在使用Ope

15、n方法打开数据表之前,将该记方法打开数据表之前,将该记 录集对象的录集对象的LockType属性设置成属性设置成adLockPessimistic或或 adLockOptimistic,如,如 rsTeacher.LockType = adLockPessimistic rsTeacher.Open 导师导师, cnGraduate, , , adCmdTable 精选课件22 nRecordset对象的对象的LocyType属性决定数据的锁属性决定数据的锁 定方式:定方式: adLockReadOnly:数据处于只读状态。:数据处于只读状态。 adLockPessimistic(保守式锁定保

16、守式锁定):编辑数据时即锁:编辑数据时即锁 定数据源记录,直到数据编辑完成才释放。定数据源记录,直到数据编辑完成才释放。 adLockOptimistic(开放式锁定开放式锁定):编辑数据时不锁定,:编辑数据时不锁定, 用用Update方法提交数据时才锁定数据源记录。方法提交数据时才锁定数据源记录。 adLockBatchOptimistic(开放式更新开放式更新):应用于批更:应用于批更 新模式新模式 精选课件23 n如果数据表中没有记录,即如果数据表中没有记录,即BOF和和EOF同时为同时为True,就,就 不能引用表中的数据。不能引用表中的数据。 将单击将单击“导师姓名导师姓名”按钮的事

17、件过程改写如下按钮的事件过程改写如下 Private Sub Command2_Click() If rsTeacher.BOF = True And rsTeacher.EOF = True Then Text1.Value = Else Text1.Value = rsTeacher!姓名姓名 End If End Sub 同理,修改单击同理,修改单击“导师编号导师编号”按钮的事件过程按钮的事件过程 同理,修改同理,修改“下一个记录下一个记录”按钮的事件过程代码按钮的事件过程代码(空表情况空表情况 下记录指针不移动下记录指针不移动) 精选课件24 精选课件25 添加新记录的步骤:添加新记录

18、的步骤: (1)用记录集的)用记录集的AddNew方法产生一个空记录方法产生一个空记录 (2)为空记录的各个字段赋值)为空记录的各个字段赋值 (3)用记录集的)用记录集的Update方法保存新记录方法保存新记录 例例7-4 在例在例7-3的基础上进行修改的基础上进行修改 精选课件26 添加的程序代码添加的程序代码: Private Sub Command4_Click() Dim Age As Byte rsTeacher.MoveFirst Age = rsTeacher!年龄年龄 读取第一条记录的年龄字段值读取第一条记录的年龄字段值 rsTeacher.AddNew 添加一条新记录添加一条

19、新记录 rsTeacher!导师编号导师编号 = 107 rsTeacher!姓名姓名 = 高原高原 rsTeacher!年龄年龄 = Age rsTeacher.Update End Sub 思考:什么情况下单击思考:什么情况下单击“新记录新记录”按钮,系统会提示出错按钮,系统会提示出错 ? 精选课件27 n修改记录的步骤:修改记录的步骤: (1)将记录指针移动到需要修改的记录上)将记录指针移动到需要修改的记录上 (2)对记录中的相关字段的值进行修改)对记录中的相关字段的值进行修改 (3)用)用Update方法保存更改方法保存更改 n修改后的结果不得违反数据完整性约束修改后的结果不得违反数据

20、完整性约束 例例7-5 在模块在模块ADO中添加过程中添加过程Update_Age:将:将 “导师导师”表中第表中第5条记录的年龄字段值修改为条记录的年龄字段值修改为60岁。岁。 注意设置记录集的注意设置记录集的LockType类型类型 精选课件28 Sub Update_Age() Dim I As Byte Dim cnGraduate As ADODB.Connection Set cnGraduate = CurrentProject.Connection Dim rsTeacher As ADODB.Recordset Set rsTeacher = New ADODB.Record

21、set rsTeacher.LockType = adLockPessimistic rsTeacher.Open 导师导师, cnGraduate, , , adCmdTable 向下跳过向下跳过4条记录,将记录指针指向第条记录,将记录指针指向第5条记录条记录 For I = 1 To 4 rsTeacher.MoveNext Next I rsTeacher!年龄年龄 = 60 : rsTeacher.Update End Sub 精选课件29 例例7-6在例在例7-4的基础上进行修改的基础上进行修改 添加的程序代码添加的程序代码: Private Sub Command5_Click()

22、 rsTeacher.MoveFirst Do While Not rsTeacher.EOF If rsTeacher!性别性别 = 男男 Then rsTeacher!年龄年龄 = rsTeacher!年龄年龄 + 1 rsTeacher.Update End If rsTeacher.MoveNext Loop End Sub 精选课件30 n删除记录要慎重,因为被删记录无法恢复删除记录要慎重,因为被删记录无法恢复 n删除记录的步骤删除记录的步骤: (1)移动到需要删除的记录上)移动到需要删除的记录上 (2)用记录集对象的)用记录集对象的Delete方法删除当前记录方法删除当前记录 (3

23、)将某条记录指定为当前记录)将某条记录指定为当前记录 n删除记录后,删除记录后,Access不能自动使下一条记录成不能自动使下一条记录成 为当前记录。根据不同情况,可用为当前记录。根据不同情况,可用MoveNext或或 MoveLast方法定位记录指针。方法定位记录指针。 精选课件31 例例7-7 对例对例7-6添加如下的单击窗体事件过程:添加如下的单击窗体事件过程: Private Sub Form_Click() rsTeacher.MoveFirst Do While Not rsTeacher.EOF rsTeacher.MoveNext Loop MsgBox 待删除记录不存在!待删

24、除记录不存在! End Sub 如果找到如果找到“高原高原”,进行相关操作,然后退出过程进行相关操作,然后退出过程 转下页转下页 精选课件32 If rsTeacher!姓名姓名 = 高原高原 Then Flag = MsgBox(是否要删除高原?是否要删除高原?, vbYesNo, 删除确认删除确认) If Flag = vbYes Then 确定删除确定删除 rsTeacher.Delete MsgBox 记录删除完毕。记录删除完毕。 rsTeacher.MoveNext 删除记录后设定新的当前记录删除记录后设定新的当前记录 If rsTeacher.EOF Then rsTeacher.

25、MoveLast Exit Sub ElseIf Flag = vbNo Then 不删除记录不删除记录 MsgBox 放弃删除操作!放弃删除操作!, , 删除确认删除确认 Exit Sub End If End If 如果找到如果找到“高原高原”,进行相关操作,然后退出过程,进行相关操作,然后退出过程 精选课件33 例例7-8 在在ADO模块中建立模块中建立Sex过程:统计并在输过程:统计并在输 出对话框中显示男、女研究生人数比。要求以人出对话框中显示男、女研究生人数比。要求以人 数多的一方为数多的一方为1、放在右侧、保留小数两位。、放在右侧、保留小数两位。 程序分析:先遍历全程序分析:先遍

26、历全 部记录,分别统计出男、部记录,分别统计出男、 女研究生人数。如果男女研究生人数。如果男 生人数多于女生,则男生人数多于女生,则男 生人数为生人数为1,女生人数改,女生人数改 为女生人数除以男生人为女生人数除以男生人 数;反之亦然。数;反之亦然。 精选课件34 Sub Sex() (定义对象、完成与数据库的连接、打开研究生表、定义变量)(定义对象、完成与数据库的连接、打开研究生表、定义变量) Student.MoveFirst Do While Not Student.EOF 统计男、女研究生人数统计男、女研究生人数 If Student!性别性别 = 男男 Then Boy = Boy

27、+ 1 If Student!性别性别 = 女女 Then Girl = Girl + 1 Student.MoveNext Loop If Girl = Boy Then 以男生人数为以男生人数为1 MsgBox 女女:男男= Data Source=;User ID=用户标识用户标识;Password=密码密码; 其中:其中: 提供者提供者为为Microsoft.Jet.OLEDB.4.0 数据库名数据库名包括数据库所在的路径及包括数据库所在的路径及.mdb文件的名字文件的名字 用户标识用户标识是用户的名字,缺省为是用户的名字,缺省为admin 密码密码省略则表示没有密码省略则表示没有密码 精选课件54 例例7-30 在在SQL模块中编写过程模块中编写过程Double_Database (Department表保存在表保存在C:Manage.mdb数据库中)数据库中) Sub Double_Database() (定义对象、连接数据库、设置记录集定义对象、连接数据库、设置记录集LockType属性、打开属性、打开导师导师表表)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论