[教案]
(十四)数据库技术
授课方式:讲授法
授课学时:6学时
教学目的:
通过本次课的学习,学生应该掌握VB与数据库连接的几种方法,并能够熟练掌握应用Data控件访问数据库。
教学重点和难点:
1.VB访问数据库的方法;
2.Data控件的应用。
教学过程:
一、数据库的基本概念
介绍有关在用VB开发数据库的几个基本概念--数据库、表、字段、和记录。
二、VB访问数据库技术
VB提供了两类访问数据的方式:数据控件和DAO,而我们最常用的是数据控件。在数据控件中有两个控件:DATA控件和ADO DATA控件;此外,VB还可以通过ODBC数据源同后台数据库连接。在这里要介绍这几种数据库技术的最佳适用环境以及他们之间的区别。
三、记录集Recordset
1.介绍什么是Recordset记录集,以及它的特点和用它的好处。
2.属性
介绍记录集的5个常用属性:
(1)AbsolutePosition(2)BOF(3)EOF(4)NoMatch(5)Bookmark。
3.方法
介绍常用的三种方法:--Move方法、Find方法和Seek方法,并掌握两种查找方法Find方法和Seek方法的区别。
四、Data控件
1.常用属性
介绍Data控件的6个常用属性:
(1)Connec(2)DatabaseName(3)RecordSource(4)RecordType(5)EOFAction
(6)BOFAction
2.事件--Reposition 事件和Validate 事件 (1)两个事件的实际应用情况 (2)两个事件的触发条件
3.方法--Refresh 方法和UpdateControls 方法 (1)方法的应用环境 (2)方法使用的语法格式
五、 数据库记录的增加、删除和修改操作
需要用到的方法有AddNew, Delete, Edit, Update 和Refresh 方法。 (1)以上几种方法使用时调用的语法格式 (2)三种操作的算法
学生作业:
上机实验十、十一:Data 控件的使用;ADO 的使用。
[讲稿]
(十四) 数据库技术
14.1 数据库的基本概念
1.数据库和数据表
数据库就是一组排列成易于处理和读取的相关信息的集合。
学号
课程 成绩 990001 数学 85
学号 姓名 性别 专业 出生日期 990001 万林 男 物理 82-1-11
990002 庄前 女 物理 82-9-21
。。。 。。。 。。。 。。。 。。。
数据库
记录集
学号 姓名 专业 课程 成绩 990001 万林 物理 数学 85 990002 庄前 物理 外语
90
。。。 。。。 。。。 。
关系模型已经成为数据库设计事实上的标准。一个数据库可以由多个表组成,表与表之间可以用不同的方式相互关联。若第一个表中的一条记录内容与第二个表中多条记录的数据相符,但第二个表中的一条记录只能与第一个表的一条记录的数据相符,这样的表间关系类型叫做一对多关系。
若第一个表的一条记录的数据内容可与第二个表的多条记录的数据相
符,反之亦然,这样的表间关系类型叫做多对多关系。可以将一个或几个表中的数据构成记录集Recordset 对象,记录集也由行和列构成,它与表类似。
在VB 中数据库内的表格不允许直接访问,而只能通过记录集对象进行记录的操作和浏览,因此,记录集是一种浏览数据库的工具。
14.2 VB访问数据库技术
1.VB数据库应用程序由用户界面、数据库引擎和数据库三部分组成。(1)用户界面,
(2)数据库引擎
是一组动态链接库(Dll),它主要作用是(了解)
(3)数据库(Access),.mdb
2.VB数据库应用程序与Jet数据库引擎的接口
VB中提供了两种与Jet数据库引擎接口的方法,Data控件和数据访问问对象(DAO)。
(1)数据控件(Data)
(2) 数据访问访问对象(DAO)
(3)ActiveX数据库对象(ADO)
全新技术,提供了更加简明的数据库访问对象模型。
14.3 记录集Recordset
Recordset对象表示来自基本数据表或命令执行结果的记录集。
Recordset的对象的属性CursorType可以设置4种游标:动态游标、键集游标、静态游标、仅向前游标
BOF和EOF
常用方法:
AddNew:添加新记录
Update:更新数据
Delete:删除数据
MoveFirst
MoveLast
MoveNext
MovePrevious Move
14.4 Data 控件
工具箱内数据控件图标形状
画在窗体上的外观
能够利用三种记录集对象访问数据库中的数据,连接方法: 选定 数据库
连接属性 Data 控件属性说明 Connect 指定数据控件所要连接的数据库类型。 DatabaseName 指定具体使用的数据库文件名,包括所有的路径名。
RecordSource
确定具体可访问的数据,这些数据构成记录集对象。
注:RecordSource属性可以是数据库中的单个表名,也可以是使用SQL查询语言的一个查询字符串。如果连接的是单表数据库,则DatabaseName属性应设置为数据库文件所在的子目录名,而具体文件名放在RecordSource属性中。
数据控件只能连接数据库产生记录集,不能显示记录集中的数据,要显示记录集中的数据必须通过能与它绑定的控件来实现。
绑定控件具有DataSource 和DataField两个重要属性,其作用如下:
Data控件、记录集与绑定控件
记
录
集学号姓名专业课程
成绩
990001 万林物理数学
85
数据库
属性绑定控件绑定属性说明DataSource 指定一个有效的数据控件连接到数据库上。DataField 设置数据库有效的字段与绑定控件建立联系。
例11.1设计一个窗体显示在11.2节中建立的的Student.mdb数据库中基本情况表的内容。
例11.2 用一个数据网格控件MsFlexGrid显示Student.mdb数据库中基本情况表的内容。
属性:
Rows 、Cols (网格的行或列数);
FixedRows 、FixedCols (不可卷动的行或列数)。
数据控件的事件
事件说明
Reposition 发生在一条记录成为当前记录后,这个事件中显示当前指针的位置。
Vaildate 移动记录指针前、修改与删除记录前或卸载含有数据控件的窗体时触发该事件。参数Save可判断
方法说明
Refresh 激活对数据控件属性的改变,使对数据库的操作有效。UpdateControls 将数据从数据库中重新读到被数据控件绑定的控件内。UpdateRecord 将绑定控件内的数据写入到数据库中而不触发数据控件的Vaildate事件。
14.5 数据库记录的增加、删除和修改操作
Dim cnn As New ADODB.Connection, rst As New ADODB.Recordset Private Sub Form_Load()
s = "Provider = Microsoft.Jet.OLEDB.3.51; Persist Security Info = False;" & "Data Source = d:\VB6lx\rsgl.mdb"
cnn.CursorLocation = adUseClient
cnn.Open s : Set rst = New Recordset
rst.Open "职工工资", cnn, adOpenStatic, adLockOptimistic
For Each aa In text1
Set aa.DataSource = r ' 绑定所有文本框到记录源
Next
Combo1.AddItem “全体”' 初始化组合框
Combo1.AddItem "保卫"
Combo1.AddItem "财务"
Combo1.AddItem "技术"
Combo1.AddItem "生产"
Combo1.AddItem "供销"
Combo1.Text = Combo1.List(0)
End Sub
编写命令按钮控件数组Command1()的Click事件代码:
Private Sub Command1_Click(Index As Integer)
n = Index
Select Case n
Case 0
rst.MoveFirst
Case 1 ' 上一个
rst.MovePrevious
If rst.BOF Then rst.MoveFirst
Case 2 ' 下一个
rst.MoveNext
If rst.EOF Then rst.MoveLast
Case 3 ' 末一个
rst.MoveLast
End Select
End Sub
编写组合框Combo1的Click事件代码:
Private Sub Combo1_Click()
t = Combo1.Text
If t = "全体" Then
rst.Filter = ""
Else
rst.Filter = "部门= '" & t & "
End If
rst.Resync adAffectAllChapters
End Sub
使用ADO Data控件建立的工资管理数据窗体,如图所示。
设计步骤如下:
(1) 建立应用程序用户界面。
(2) 设置对象属性。
(3) 编写代码。
Private Sub command1_Click(Index As Integer)
Select Case Index
Case 0 '添加∕确定按钮
If command1(0).Caption = "添加(&A)" Then
command1(0).Caption = "确定(&O)"
command1(1).Caption = "取消(&C)"
Adodc1.Recordset.AddNew
aa (False)
Else
command1(0).Caption = "添加(&A)"
Adodc1.Recordset.UpdateBatch adAffectAll
aa (True)
End If
Case 1 ' 编辑∕取消按钮
If command1(1).Caption = "编辑(&E)" Then
command1(0).Caption = "确定(&O)"
command1(1).Caption = "取消(&C)"
aa (False)
Else
command1(0).Caption = "添加(&A)"
command1(1).Caption = "编辑(&E)"
Adodc1.Recordset.CancelUpdate
Adodc1.Refresh
aa (True)
End If
Case 2 ' 删除按钮
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext
Case 3 ' 关闭按钮
Unload Me
End Select
End Sub
其中调用了通用Sub过程aa:
Private Sub aa(l As Boolean)
Dim oTxt As TextBox
For Each oTxt In text1
oTxt.Locked = l
Next
command1(2).Visible = l
command1(3).Visible = l
End Sub
为文本框控件组Text1编写计算“实发工资”的过程代码:Private Sub text1_Validate(Index As Integer,_
Cancel As Boolean)
Dim a(3 To 8) As Single
Select Case Index
Case 3 To 8
For i = 3 To 8
a(i) = Val(text1(i).Text)
Next
text1(9).Text = a(3)+a(4)+a(5)+a(6)-a(7)-a(8)
End Select
End Sub
为显示当前记录位置,编写adodc1的MoveComplete事件代码Private Sub adodc1_MoveComplete(
ByVal adReason As ADODB.EventReasonEnum,
ByVal pError As ADODB.Error,
adStatus As ADODB.EventStatusEnum,
ByVal pRecordset As ADODB.Recordset
)
Adodc1.Caption = "记录:" & (Adodc1.Recordset.AbsolutePosition) End Sub