VisualBasic程序设计第七章的学习与自测

数据库类应用程序是目前最广泛的一类应用软件,只要你掌握了数据库原理及VB语言,就会非常快速地完成开发工作。本章以“成绩查询”应用程序的设计任务为起点,介绍这类程序的开发方法。.通过本章学习,要求同学们:

1.掌握VB数据库应用程序的基本框架,以及SQL操纵数据的方法,能够编写Insert、Update、Delete和Select语句,并将这些语句嵌入到VB程序中。
2.理解使用VB数据库引擎操纵数据库的方法,以及VB数据对象及数据库访问机制,能够运用ADO对象进行程序设计。
3.了解使用Excel输出报表的方法。
4.了解“成绩查询”程序的设计过程,能够读懂并完善这类程序的部分语句。

一、补充知识

1.数据库、数据库管理系统和数据库系统

数据库:按照数据结构来组织、存储和管理数据的仓库。
数据库管理系统:一种操纵和管理数据库的大型软件。用于建立、使用和维护数据库。如Acess,SQLServer。
数据库系统;由数据库、数据库管理系统、数据库应用系统(如VB开发的应用程序),数据库管理员和用户构成。

2.关系数据库的概念

数据库根据数据组织方式的不同而有所不同,即数据模型不同,较常见的数据模型有层次模型、网状模型、关系模型。根据数据模型的不同,所建立的数据库结构也不同。目前使用最普遍的是关系数据库。所谓关系数据库是把数据组成一张或多张二维表格,即关系表,多张彼此关联的表格群组形成数据库,即关系数据库。
在关系数据库中,数据以数据二维表的形式存在,如表7.1所示。数据二维表简称数据表由行和列组成,数据表中每一行称为一个记录,每一列称为一个字段,如表7.1中有4条记录,每条记录包含5个字段:学号(Sno),姓名(Sname),性别(Sex),年龄(Sage),所在系(Sdept)。关系模型要求每个字段数据类型相同,并且是不可再分的,如果某个字段能唯一地标识这条记录,则这个字段就被称为主关键字或主码(Key),如上表的学号(Sno)。
表7.1 学生基本情况表(Student)
学生基本情况表
在关系数据库中,我们用到了数据库、数据表、字段、记录等概念,小结如下:

  • 关系:从用户观点看,一个关系对应通常的一张二维表。
  • 记录:二维表中的每一行数据为一个记录。如表7.1有4条记录
  • 字段:每一列称为一个字段,每个字段都有一个名称。如学生姓名是一个字段,它的名称是Sname。
  • 数据表:记录的集合构成一个二维表格,称为数据表。如表7.1。
  • 数据库:多个相关的数据表的集合,构成数据库,每个数据库都已文件的形式存储在磁盘上
  • 主健:如果某个字段能够唯一地标识一条记录,则称此记录为主健,如表7.1中的学号(Sno)。
  • 索引:索引是对某字段的内容按大小进行排序,然后对该字段索引进行快速检索便可找到相应记录。
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.2所示。
查询结果
此操作在关系数据库中称投影操作,投影操作返回二维表格的若干列。

例2.查询student表中所有计算机科学系的学生。
分析:应用WHERE子句构造查询条件,使其满足能够查询Student表中所有计算机科学系的学生。
SQL语句如下:

SELECT * FROM WHERE student.Sdept= '计算机科学系'

查询结果如表7.3所示。
SELECT * FROM WHERE student.Sdept= '计算机科学系' 查询结果
(2)数据更新
SQL中数据更新包括插入数据、修改数据和删除数据三种语句。
①插入数据
语句格式为:

   INSERT INTO 表名(属性列)VALUES(值列)

例3.在选课表中插入一条选课信息:学号为0005的学生选了003号课程,成绩为85。
.在选课表中插入一条选课信息:学号为0005的学生选了003号课程,成绩为85。
SQL语句如下:

INSERT INTO sc(Sno,Cno,grade)VALUES'0005', ' 003', '85'

则原来的选课表变为表7.4-1的形式。
选课表
②修改数据
语句格式为:

   UPDATE 表名SET 列名=值, WHERE 条件

注意:如果条件为空,则修改所有的字段。
例4.将学生表中学号为0002的学生名字改为赵月,所属系改为“电子信息工程系”。
SQL语句如下:

  UPDATE student SET Sname='赵月', Sdept= '电子信息工程系'WHERE Sno= '0002'

③删除数据
语句格式为:

  DELETE FROM 表名 WHERE 条件

注意:如果条件为空,则删除所有的记录。
例5.删除学号为0002的同学选002号课的记录。
SQL语句如下:

   DELETE FROM sc WHERE sno= '0002'and cno='002'

例6.删除计算机科学系同学所有的选课记录。
在选课表sc中,没有计算机科学系的信息,必须在student表中查询。这时需要用到谓词IN所带的子查询。
SQL语句如下:

DELETE FROM sc WHERE sno IN
(SELECT Sno FROM student WHERE Sdept = '计算机科学系'

二、本章知识点分析

1. 数据库类型

(1)本地数据库
主要指Microsoft Access数据库。
(2)外部数据库
指采用ISAM(Indexed Sequential Access Method,索引顺序访问方法)的数据库,比如dBase、Foxpro、Paradox和Execle等。
(3)远程数据库
指SQL Server、Oracle、DB2等大型数据库,当前的大型数据库应用程序基本上都是以这类数据库为后台。

2.数据库引擎

数据库应用程序是一种非常典型的前后台软件结构,前台是应用程序(如VB程序),后台是数据库管理系统(如SQL Server),前后台之间通信的主要机制称为数据库引擎。
数据库引擎
在VB中常用的数据库引擎一般有三种:Jet引擎,ODBC,OLE DB
(1)Jet引擎:联合数据库引擎,是Microsoft公司开发的用于本地数据库(比如Access)、外部数据库(比如dBase、Excel、Paradox)的数据库引擎。它也可以访问远程数据库(比如SQL Server、Oracle),但必须通过ODBC来转接。
(2)ODBC:开放式数据库连接,是一种建立数据库驱动程序的标准,当前几乎所有的DBMS都支持这种数据库引擎。
(3)OLE DB:是Microsoft公司于1996年提出了一种新的数据库访问策略,其核心是一系列组件对象模型(COM)接口,被命名为OLE DB。

3.数据对象

直接使用数据库引擎来编写应用程序比较繁琐,VB采用面向对象技术,将三种数据库引擎封装成三种访问数据库的对象。
(1)DAO对象:可以使用Jet引擎和ODBC两种方式访问数据库。
(2)RDO对象:一般采用ODBC来访问数据库。
(3)ADO对象:主要采用OLE DB访问数据库,也支持ODBC访问,但需要经过OLE DB转接。

4.数据访问控件

为了进一步减少数据库应用程序的编程工作量,VB将DAO、RDO和ADO对象模型制成了数据控件。即:
• DAO控件
• RDO控件
• ADO控件

5.数据库引擎、对象与控件的关系

数据库引擎、对象与控件的关系

6.ADO对象模型

ADO对象模型共包含7个对象,即Connection、Command、Recordset、Parameter、Property、Field和Error。
在VB应用程序中最常用的是Connection、Recordset和Field三个对象。

7.数据库应用程序开发的基本步骤

(1)创建数据库
用Access 或SOLServer创建数据库
(2)界面设计
根据程序运行界面,用标签、文本框、命令按钮和Microsoft FlexGrid表格控件等进行界面设计。
(3)代码设计
1)连接数据库
①添加ADO对象
在VB集成开发环境中,选择“工程-引用”菜单,添加以下对象库:Microsoft ActiveX Data Objects 2.7 Library(ADO数据对象)。
②添加一个标准模块
在VB集成开发环境中,选择“工程—模块”菜单,添加一个标准模块。
③在标准模块中声明ADO对象为全局变量
在模块代码编辑器的顶部用Public声明,用于创建与数据库的连接。
方法1

 Public ADOcn As Connection  '声明对象
    Set ADOcn = New Connection '创建新对象
方法2
    Public ADOcn As New Connection

④创建Main子过程,将其作为启动对象
选择“工程-工程1属性“菜单,将启动对象设为Sub Main, 然后单击确定按钮。
⑤VB程序与后台数据库相连
采用“连接字符串”的方法,步骤如下;

  • 首先选择“工程-添加Data Environment”菜单项,则出现如图1所示窗体。

Data Environment”菜单项

  • 在Connection1之上点击鼠标右键,并选择“属性”菜单项,则出现如图2所示窗体。

在Connection1之上点击鼠标右键,并选择“属性”菜单项

  • 在图2所示窗体上选择需要链接的数据库引擎后(比如要链接SQL Server数据库),点击“下一步”按钮,将出现如图3所示界面。

在图2所示窗体上选择需要链接的数据库引擎后(比如要链接SQL Server数据

  • 设置完成并测试连接成功后,将回到VB集成环境。此时,只要到Connection1的属性窗,将ConnectionSource属性拷贝出来,即可做为我们的“连接字符串”了。如图4所示。

设置完成并测试连接成功后,将回到VB集成环境。此时,只要到Connection1的属性窗,将ConnectionSource属性拷贝出来,即可做为我们的“连接字符串”了。如图4所示
2)对数据库中的数据进行增、删、改、查操作
①声明并创建Recordset对象
• ‘声明一个新的Recordset对象

Dim ADOrs As New Recordset

• ‘与ADO链接对象建立关联

•   ADOrs.ActiveConnection = ADOcn

②判断是否找到了记录
• 如果在“学生”表中找到了满足条件的记录,那么 ADOrs.EOF的值为True,
即真值。
• 否则为假,即False
• EOF的英文全称是:End Of File
③访问字段的值
• 当使用Open方法打开一个记录集后,并找到了符合条件的数据后,我们就可
以访问其中的数据了,一般的方法是:
• ADOrs.Fields(“学号”)
• 或者ADOrs(“学号”)
3)将记录在窗体上显示
①在TextBox控件中显示

Text1.Text = ADOrs.Fields("学号")

②读取到变量中

Dim strNo As String
strNo = ADOrs.Fields("学号")
Text1.Text = strNo

③在Grid控件中以二维表的形式显示
一般可以采用MSFlexGird控件进行显示,这个控件的用法比较简单,请同学们参照第一节的代码。在使用这类控件显示数据时,一般的步骤是:
第一步:清空数据。
第二步:设置标题栏。
第三步:打开记录集。
第四步:使用循环将记录集中的数据添加到Grid中去。

二、自测题

(一)单项选择题

1.不属于VB数据库引擎的是(  )。
A.ODBC      B.Jet引擎
C.OLE DB   D. BDE 
2.使用ADO对象模型时,使Recordset和Connection对象建立连接的属性是( )。
A.Open B.Execute
C.CommandType D.ActiveConnection
3.如果希望以模态方式显示窗体Form1,下列正确的语句是( )
A.Form1.Show 0 B.Form1.Show 1
C.Form1.Show D.以下都不正确
4.用来从数据库表中删除记录的SQL命令是( )。
A.where B.select
C.update D.delete
5.在VB中,Access数据库属于( )。
A.外部数据库 B.远程数据库
C.本地数据库 D.网络数据库
6.ADO对象模型含有七种对象,其中用于建立一个和数据原的连接的对象是( )。
A.Command B.Connection
C.Recordset D.Field
7.ADO对象模型含有七种对象,其中代表数据库表中的一整套记录或执行一条命令而得到的结果的对象是( )。
A.Command B.Connection
C.Recordset D.Field
8.Access数据库文件的扩展名是( )。
A.dbf B.dbt
C.mdf D.mdb
9.在关系型数据库中,“记录”的含义是( )。
A.数据库中数据 B.数据表中每一行数据
C.数据表中的每一列数据 D.相关数据组成的二维表格
10.在关系型数据库中,“字段”的含义是( )。
A.数据库中数据 B.数据表中每一行数据
C.数据表中的每一列数据 D.相关数据组成的二维表格

(二)程序完善题

假设在d盘根目录中存在一个名为“student.mdb”的Access数据库,其中包含一张名为“学生基本情况”的数据表,表中存放了学生的基本信息,如图1所示。
现在要求利用VB编写一个数据库记录增加程序,程序的运行界面如图2所示,基本逻辑是:分别在Text1、Text2、Text3中输入学号、姓名、籍贯信息,然后点击“保存”按钮(Command1)将该记录添加到数据库中。如果数据库中已经存在相同的学号信息,则程序应提示用户“记录已存在,请重新输入”,并将焦点置于Text1上,等待用户修改或重新输入。当点击退出按钮(Command2)时关闭本窗体。

假设在d盘根目录中存在一个名为“student.mdb”的Access数据库,其中包含一张名为“学生基本情况”的数据表,表中存放了学生的基本信息
程序如下,请补充完整

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

(三)编程题

假设用Access创建了一个名为“学生.MDB”的数据库,并在其中创建了一张名为“学生基本情况”的数据表,表中存放了学生的基本信息,如图1所示。
现在要求利用VB编写一个数据库查询程序,程序的运行界面如图2所示,基本逻辑是:首先文本框(Text1)中输入希望查询的学生学号,然后点击“查询”按钮(Command1),如果数据库中存在该学号,则分别在Text2、Text3、Text4中显示学号、姓名、籍贯信息,否则提示用户“记录不存在”并使Text1获得焦点,要求用户重新输入。当点击退出按钮(Command2)时关闭本窗体。
设用Access创建了一个名为“学生.MDB”的数据库,并在其中创建了一张名为“学生基本情况”的数据表,表中存放了学生的基本信息
现在要求利用VB编写一个数据库查询程序,程序的运行界面如图2所示,基本逻辑是:首先文本框(Text1)中输入希望查询的学生学号,然后点击“查询”按钮

自测题答案

(一)单项选择题

1.D 2.D 3.B 4.D 5.C 6.B 7.C 8.D 9.B 10.C

(二)程序完善题

[1] ADOcn.Open
[2] string
[3] ADOcn
[4] Text1
[5] strSQL
[6] ADOcn
[7] End If
(三)编程题
程序代码如下:

Private ADOcn As Connection
Private Sub Form_Load()
Set ADOcn = New Connection
    ADOcn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\学生.MDB"
End Sub

Private Sub Command1_Click()
    Dim strSQL As String
    Dim ADOrs As New Recordset
    ADOrs.ActiveConnection = ADOcn
    strSQL = "Select * From 学生基本情况 Where 学号=" + " ' " + Text1 + " ' "
    ADOrs.Open strSQL
    If Not ADOrs.EOF Then
        Text2 = ADOrs.Fields("学号")
        Text3 = ADOrs.Fields("姓名")
        Text4 = ADOrs.Fields("籍贯")
    Else
        MsgBox "要查询的学号不存在,请重新输入!", vbOKOnly, "信息提示"
        Text1 = ""
    Text1.SetFocus
    End If
End Sub
  Private Sub Command2_Click()
     UnLoad Me
  End

猜你喜欢

转载自blog.csdn.net/shensiback/article/details/80866464