VB课件

来源:百度文库 编辑:神马文学网 时间:2024/04/29 14:02:22
',1)">


',2)">
第7章  数据库应用程序设计方法
本章以成绩查询系统为例,较系统地介绍了数据库应用程序的开发模式和基本方法。通过本章学习,你应该能够达到如下学习目标:
1.掌握VB数据库应用程序的基本框架,以及SQL操纵数据的方法,能够编写Insert、Update、Delete和Select语句,并将这些语句嵌入到VB程序中。
2.理解使用VB数据库引擎操纵数据库的方法,以及VB数据对象及数据库访问机制,能够运用ADO对象进行程序设计
3.了解使用Excel输出报表的方法。
4.了解“成绩查询”程序的设计过程,能够读懂并完善这类程序的部分语句。
一、相关知识
数据库、数据库管理系统、数据库系统的概念在数据库领域中是比较常见的。所谓数据库是计算机内有组织、可共享的数据的集合。而数据库管理系统是用户与操作系统之间的数据管理软件,数据库在建立、运行和维护时由数据库管理系统统一管理、统一控制。在数据库管理系统之上有应用系统,例如用VB开发数据库应用程序,以供终端用户使用。因此,比较严格的说法是数据库系统由数据库、数据库管理系统、数据库应用系统、数据库管理员和用户构成。但有时数据库管理系统和数据库系统常常混用。
1.关系数据库概念
数据库根据数据组织方式的不同而有所不同,即数据模型不同,较常见的数据模型有层次模型、网状模型、关系模型。根据数据模型的不同,所建立的数据库结构也不同。目前使用最普遍的是关系数据库。所谓关系数据库是把数据组成一张或多张二维表格,即关系表,多张彼此关联的表格群组形成数据库,即关系数据库。
在关系数据库中,数据以数据二维表的形式存在,如表7.1、7.2所示。数据二维表(简称数据表)由行和列组成,数据表中每一行称为一个记录,每一列称为一个字段,如表7.1中有4条记录,每条记录包含5个字段:学号(Sno),姓名(Sname),性别(Sex),年龄(Sage),所在系(Sdept)。关系模型要求每个字段数据类型相同,并且是不可再分的,如果某个字段能唯一地标识这条记录,则这个字段就被称为主关键字或主码(Key),如上表的学号(Sno)。
表7.1 学生基本情况表(Student)
Sno
Sname
Sex
Sage
Sdept
0001
王磊

19
计算机科学系
0002
刘进

20
中文系
0003
李波

21
土建系
0004
张建国

20
计算机科学系
表7.2 选课表(sc)
Sno
Cno
grade
0001
001
82
0002
002
76
0003
003
80
0004
002
95
在关系数据库中,我们用到了数据库、数据表、字段、记录等概念,小结如下:
Ø         关系:从用户观点看,一个关系对应通常的一张二维表。
Ø         记录:二维表中的每一行数据为一个记录。如表7.1有4条记录
Ø         字段:每一列称为一个字段,每个字段都有一个名称。如学生姓名是一个字段,它的名称是Sname。
Ø         数据表:记录的集合构成一个二维表格,称为数据表。如表7.1。
Ø         数据库:多个相关的数据表的集合,构成数据库,每个数据库都已文件的形式存储在磁盘上
Ø         主码:如果某个字段能够唯一地标识一条记录,则称此记录为主码,如表7.1中的学号(Sno)。
Ø         索引:索引是对某字段的内容按大小进行排序,然后对该字段索引进行快速检索便可找到相应记录。
2.数据库管理系统概念
数据库管理系统(DBMS)是用户与操作系统之间的数据管理软件系统,对数据库的各种管理与操作都是由数据库管理系统进行的,用户在对数据库进行操作时,只需向DBMS提出“需要做什么”的请求,不必了解“如何做”。DBMS根据用户的请求,完成对数据库的实际操作。主要包括:创建数据库中的各种对象,如创建新表、索引等;对数据表中的数据进行增加、修改和删除等;数据库的事务管理、并发控制、故障恢复、完整性控制及安全控制等。
数据库管理系统与数据库是密不可分的,每一种数据库都由某一特定的数据库管理系统进行管理,所以数据库管理系统也常常被称为数据库系统。常用的数据库系统有Access、SQL Server 、Oracle等。
3.SQL语言
SQL是结构化查询语言(Structure Query Language)的缩写。它是关系数据库的标准语言,简捷易学,功能强大。它可以实现数据查询、数据更新等多种功能。
(1)数据查询
SQL提供SELECT语句进行数据库的查询,其一般格式为:
SELECT字段列表FROM表名WHERE条件GROUP BY 分组字段
HAVING分组条件ORDER BY字段
说明如下:
Ø         字段列表:字段可以是一个字段,也可以是多个字段,若是多个字段,字段之间用逗号分隔,如果要选择某个表中的所有字段,可用“*”代替。
Ø         FROM子句:用于指定一个或多个表,如果所选的字段来自不同的表,则字段名前应加表名前缀。
Ø         WHERE子句:用于构造查询条件。
Ø         GROUP BY与HAVING子句:共同用于对结果集进行分组过滤处理。它能把在指定字段列表中有相同值的记录合并成一条记录。
例1.查询student表(表7.1)中的所有学生的学号与姓名。
分析:查询所有学生的学号与姓名,无查询条件。
SQL语句如下:
SELECT Sno,Sname FROM student
查询结果如表7.3所示。
表7.3 查询结果
Sno
Sname
0001
王磊
0002
刘进
0003
李波
0004
张建国
此操作在关系数据库中称投影操作,投影操作返回二维表格的若干列。
例2.查询student表中所有计算机科学系的学生。
分析:应用WHERE子句构造查询条件,使其满足能够查询Student表中所有计算机科学系的学生。
SQL语句如下:
SELECT * FROM WHERE student.Sdept= '计算机科学系'
查询结果如表7.4所示。
表7.4 查询结果
Sno
Sname
Sex
Sage
Sdept
0001
王磊

19
计算机科学系
0004
张建国

20
计算机科学系
此操作在关系数据库中称选择操作,选择操作返回二维表格的若干行。
例3.查询选修了002号课程的学生姓名和成绩,并按由高到低排列。
分析:学生姓名在表student中,成绩在表sc中,显然所需信息需要从两个表中获得。按分数由高到低排列需要用关键字DESC,反之,用ASC(默认) 。
SQL语句如下:
SELECT student.Sname,sc.grade
FROM student,sc
WHERE student.Sno=sc.Sno and sc.Cno= "002"
ORDER BY grade DESC
查询结果如表7.5所示。
表7.5查询结果
Sname
grade
张建国
95
刘进
76
此操作在关系数据库中称连接操作,连接操作是通过某个关键字将两个表连接起来。本例中是通过Sno关键字将表student和sc连接起来。在SELECT语句中,特别要指明某个字段来源于哪个表,如student.Sname表示Sname这个字段来源于student表。
(2)数据更新
SQL中数据更新包括插入数据、修改数据和删除数据三种语句。
①插入数据
语句格式为:
INSERT INTO 表名(属性列)VALUES(值列)
例4.在选课表中插入一条选课信息:学号为0005的学生选了003号课程,成绩为85。
SQL语句如下:
INSERT INTO sc(Sno,Cno,grade)VALUES('0005', ' 003', '85')
②修改数据
语句格式为:
UPDATE 表名SET 列名=值,××× WHERE 条件
注意:如果条件为空,则修改所有的字段。
例5.将学生表中学号为0002的学生名字改为赵月,所属系改为“电子信息工程系”。
SQL语句如下:
UPDATE student SET Sname='赵月', Sdept= '电子信息工程系'WHERE Sno= '0002'
③删除数据
语句格式为:
DELETE FROM 表名 WHERE 条件
注意:如果条件为空,则删除所有的记录。
例6.删除学号为0002的同学选002号课的记录。
SQL语句如下:
DELETE FROM sc WHERE sno= '0002'and cno='002'
例7.删除计算机科学系同学所有的选课记录。
在选课表sc中,没有计算机科学系的信息,必须在student表中查询。这时需要用到谓词IN所带的子查询。
SQL语句如下:
DELETE FROM sc WHERE sno IN
(SELECT Sno FROM student WHERE Sdept = '计算机科学系'
二、本章重要知识点
1.三种数据库类型
VB 将数据库分为三种类型:本地数据库、外部数据库、远程数据库
本地数据库:主要指Microsoft Access数据库。
外部数据库:是指采用ISAM的数据库,如dBase,Foxpro,Paradox,Excel等。
远程数据库:指SQL Server Oracle DB2等大型数据库。
2.VB数据库访问机制
VB 通过数据引擎访问数据库
数据引擎:数据库应用程序属于一种非常典型的前后台软件结构,前台是我们的VB程序,后台则是数据库管理系统,如SQI Server。而前后台通信的主要机制称为数据库引擎。
常用的数据库引擎有三种:Jet引擎、ODBC、OLE DB。
3.数据对象
VB采用面向对象技术,将三种数据库引擎封装成三种访问数据库的对象,即DAO、RDO、ADO。
DAO对象:可以使用Jet引擎和ODBC两种方式访问数据库。
RDO对象:一般采用ODBC访问数据库。
ADO对象:主要采用OLE DB访问数据库,也支持ODBC访问,但需要经过OLE DB转接。
4.ADO对象模型
ADO 是一种基本OLE DB 的 模型。
ADO对象模型共包含7个对象。它们是Connection、Command、Recordset、Field、Parameter、Property和 Error。其中最常用的是前4个对象。
5. 数据库应用程序的大致框架
将SQL语句嵌入到VB语言中,采用ADO数据对象模型开发数据库应用程序。
(1) 连接后台数据库
在VB应用程序中主要用Connection对象连接后台数据库,基本方法是:
l         首先声明并创建对象
Dim ADOcn As Connection       '声明对象
Set ADOcn = New Connection    '创建新对象
或上述两条语句直接写成
Dim ADOcn As New Connection
l         建立数据库连接
一般通过下列语句完成与数据库的连接“
ADOcn.Open 连接字符串
语句中的连接字符串可以通过自动生成“连接字符串 “的方法来实现,见教材184-185页。
(2)对数据库中的数据表进行更新操作
更新操作包括增加、删除和修改,这些语句的特点是没有返回的结果集,它们仅仅向数据库发出一条更新命令。可以利用Connection对象的execute方法来完成。语法如下:
ADOcn.Execute SQL语句字符串
为了提高程序的可读性和易维护性,通常采用如下方法完成上述操作:
'声明一个字符串变量
Dim strSQL As String
'拼写Insert、Delete、Updata结构化查询语句
例如:
strSQL = "Delete From 学生成绩表"
strSQL = strSQL + "Where 学号=" + "'+Combol.Text+'"
'执行SQL语句
ADOcn.Execute strSQL
(3) 对数据表进行查询(Select)操作
记录集Recordset对象是数据表的查询结果,通过使用Recordset进行Select语句的操作。基本使用方法如下:
'声明一个新的Recordset对象
Dim ADOrs As New Recordset
与ADO链接对象建立关联
ADOrs.ActiveConnection = ADOcn
'执行Select操作
ADOrs.Open "Select*From 学生成绩表"
'关闭记录集对象
ADOrs.Close
(4)显示记录集中的数据
①在TextBox中显示
Text1.Text = ADOrs.Fields("学号")
②读取到变量中
Dim strNo As String
strNo = ADOrs.Field("学号")
Text1.Text = strNo
③在Grid控件中以二维表的形式显示
采用MSFlexGrid控件进行显示,一般步骤是:
l         清空数据
l         设置标题栏
l         打开记录集
l         使用循环将记录集中的数据添加到Grid中去。
例8.假设在d盘根目录中存在一个名为“student.mdb”的Access数据库,其中包含一张名为“学生基本情况”的数据表,表中存放了学生的基本信息,如图1所示。
现在要求利用VB编写一个数据库记录增加程序,程序的运行界面如图2所示,基本逻辑是:分别在Text1、Text2、Text3中输入学号、姓名、籍贯信息,然后点击“保存”按钮(Command1)将该记录添加到数据库中。如果数据库中已经存在相同的学号信息,则程序应提示用户“记录已存在,请重新输入”,并将焦点置于Text1上,等待用户修改或重新输入。当点击退出按钮(Command2)时关闭本窗体。
图1用Access创建的学生基本情况数据表
图2 查询程序运行界面
Private ADOcn As New Connection
Private Sub Form_Load()
[1]         "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\student.mdb"
End Sub
Private Sub Command1_Click()
Dim strSQL As  [2]
Dim ADOrs As New Recordset
ADOrs.ActiveConnection = [3]
strSQL = "Select * from 学生基本情况一览表 Where 学号=" + " ' " + [4]+ " ' "
ADOrs.Open   [5]
If Not ADOrs.EOF Then
MsgBox "学号已经存在,请重新输入!", vbOKOnly, "信息提示"
Text1.SetFocus
Else
strSQL = "Insert Into 学生基本情况一览表(学号,姓名,籍贯) "
strSQL = strSQL + " Values ( '" + Text1 + " ','" + Text2 + "','" + Text3 + " ')"
[6]       .Execute strSQL
MsgBox "添加成功!", vbOKOnly, "信息提示"
[7]
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
答案:
[1] ADOcn.Open
[2] string
[3] ADOcn
[4] Text1
[5] strSQL
[6] ADOcn
[7] End If
6.数据控件、可视化数据管理器、报表设计的基本概念
见教材。