420 likes | 566 Views
第 10 章数据库应用基础. 10.1 数据库概述 10.2 VB 数据库访问 10.3 记录集对象 10.4 综合应用. 10.1 数据库概述. 数据库 以一定的组织方式将相关的数据组织在一起,存放在计算机外存储器,能为多个用户共享,与应用程序彼此独立的一组数据的集合。 Visual Basic 支持多种类型的数据库 如 Access 数据库、 FoxPro 数据库、 Microsoft Excel 、 SQL Server 和 Oracle 等。. 表. 数据库. 10.1.1 关系型数据库模型.
E N D
第10章数据库应用基础 10.1 数据库概述 10.2 VB 数据库访问 10.3 记录集对象 10.4 综合应用
10.1 数据库概述 • 数据库 以一定的组织方式将相关的数据组织在一起,存放在计算机外存储器,能为多个用户共享,与应用程序彼此独立的一组数据的集合。 • Visual Basic支持多种类型的数据库 • 如Access数据库、FoxPro数据库、Microsoft Excel、SQL Server和Oracle等。
表 数据库 10.1.1关系型数据库模型 • 关系型数据库模型将数据用表的集合来表示。通过建立简单表之间的关系来定义结构,而不是根据数据的物理存储方式建立数据中的关系。不管表在数据库文件中的物理存储方式如何,都可以把它看作一组行和列。
主键 字段 记录 关系型数据库 表是有关信息的逻辑组,行被称为记录,列则被称为字段。
10.1.2 使用SQL查询数据库 结构化查询语言(Structure Query Language,SQL)是操作关系数据库的标准语言。通过SQL命令,可以从数据库的多个表中获取数据,也可对数据进行更新操作。SQL的主要语句:
SELECT语句 • SELECT语句的基本语法形式 • SELECT 目标表达式列表FROM 表名[ WHERE 查询条件][ GROUP BY 分组字段HAVING 分组条件 ] [ ORDER BY 排序关键字段[ASC|DESC] ] • 它包含4部分,其中SELECT和FROM子句是必须的,通过使用SELECT语句返回一个记录集。 • 例 在学生基本情况表中查询物理系的学生情况: SELECT * FROM 基本情况 WHERE专业= "物理"
SELECT语句-输出表达式 • 目标表达式为查询结果要显示的字段清单(字段间用逗号分开)。数据的显示顺序由字段清单的顺序决定。 • 可用星号*代表所有字段; • 可用AS短语指定字段别名; • 可通过构造表达式对原始数据进行复杂的运算处理,产生查询结果。 • 例如,根据出生年月计算每个学生的年龄 SELECT 姓名, (Year(Date())-Year(出生年月)) AS 年龄 FROM 基本情况
SELECT语句-查询条件 • WHERE子句用于限制记录的选择 • 例如,查询1985-01-01到1986-12-31之间出生的学生: SELECT * FROM 基本情况 WHERE 出生年月 BETWEEN #1985-01-01# AND #1986-12-31# • 要枚举出若干项进行查询,使用运算符IN • 例如,查询物理系和数学系的学生数据: SELECT * FROM 基本情况 WHERE 专业 IN ("物理", "数学") • 等价于:SELECT * FROM 基本情况 WHERE专业= "物理" OR 专业 = "数学"
合计函数 描 述 AVG 获得特定字段中的值的平均数 COUNT 返回选定记录的个数 SUM 返回特定字段中所有值的总和 MAX 返回指定字段中的最大值 MIN 返回指定字段中的最小值 SELECT语句-合计函数 • 合计函数用于对记录集进行统计 • 例如,统计物理系学生的人数: SELECT COUNT(*) AS 学生人数 FROM 基本情况 WHERE专业= “物理” • COUNT(*) 在统计时包含值为空值的记录 • COUNT(表达式) 统计时忽略表达式值为空值的记录
SELECT语句-分组 • GROUP BY子句将指定字段列表中有相同值的记录合并成一条记录。 • 例如,计算每个学生各门课程平均分: SELECT 学号, AVG(成绩) AS 平均分FROM 成绩表GROUP BY 学号 • 要对分组后的数据进行过滤,可在GROUP BY子句后结合HAVING子句在分组中选择。 • 例如,查询平均分在80分以上的学生: SELECT 学号, AVG(成绩) AS 平均分FROM 成绩表GROUP BY 学号HAVING AVG(成绩)>=80
SELECT语句-排序 • ORDER BY子句决定了查询结果的排列顺序 • 在ORDER BY子句中,可以指定一个或多个字段作为排序关键字,ASC选项代表升序,DESC代表降序。
SELECT语句-多表连接 • 若查询的数据分布在多个表中,则必须建立连接查询: • SELECT目标表达式列表 FROM 表1, 表2 WHERE 表1.字段 = 表2.字段 • 例如,学生成绩表中只有学号,如何在查看学生成绩的同时能够直观地看到学生姓名?这就要在两表之间建立连接。SQL语句如下: SELECT基本情况.姓名, 成绩表.* FROM 基本情况, 成绩表 WHERE成绩表.学号=基本情况.学号
10.2 VB数据库访问 10.2.1 ADO数据控件使用基础 • 数据库应用程序引例 • 例10.1设计一个窗体,用DataGrid控件显示Student.mdb数据库中“基本情况”表的内容。
ADO数据控件使用 • VB采用ADO(ActiveX Data Objects)数据访问技术,编写本程序,需要完成以下工作: • 在窗体上添加ADO数据控件 • 使用ADO连接对象建立与数据提供者之间的连接 • 使用ADO命令对象操作数据源,从数据源中产生记录集并存放在内存中 • 建立记录集与数据绑定控件的关联,在窗体上显示数据。
连接数据源的方式 单击 数据源连接设置操作 右单击ADO控件,选择快捷菜单ADODC属性命令,打开ADO控件属性页窗
选择提供程序 选择提供程序
指定访问的数据库 指定要访问的数据库文件
连接对象重要属性 • 连接对象最重要的属性是ConnectionString,它是一个字符串,包含了用于与数据源建立连接的相关信息。典型的 ConnectionString 属性值如下: • Provider = Microsoft.Jet.OLEDB.4.0; Data Source = Student.mdb • Provide,指定连接提供程序的名称; • Data Source,用于指定要连接的数据源文件。
数据访问过程 • 应用程序通过连接对象与数据源建立连接(不同类型的数据库使用各自的连接提供程序) • 命令对象发出SQL命令从数据源中获取数据 • 数据集对象用来保存所查询到的数据记录 • 应用程序对记录集进行操作 • 记录集表示内存中来自基本表或命令执行结果的集合,也由记录(行)和字段(列)构成,可以把它当作一个数据表来进行操作
10.2.2 数据绑定 • 什么是数据绑定? • 数据绑定是一个过程,即在运行时自动为与记录集中的元素关联的控件设置属性。以便通过控件显示数据集中的数据。
数据绑定 • Windows 窗体有简单数据绑定和复杂数据绑定 • 简单数据绑定 • 简单数据绑定就是将控件绑定到单个数据字段。每个控件仅显示数据集中的一个字段值。最常用的简单数据绑定是将数据绑定到文本框和标签。 • 在设计或运行时设置控件属性建立绑定: • DataSource:指定ADO数据控件 • DataField:设置记录集中有效的字段
简单数据绑定 • 例10.2 数据绑定的操作过程 • 界面设计 • 建立连接和产生记录集 • 设置绑定属性
复杂数据绑定 • 复杂数据绑定允许将多个数据字段绑定到一个控件,同时显示记录源中的多行或多列。 • 支持复杂数据绑定的常用控件: • DataGrid 数据网格 • MSHFlexGrid 数据网格 • DataList 数据列表框 • DataCombo 数据组合框
复杂数据绑定 • 例10.3复杂数据绑定的操作过程 • 界面设计 • 建立连接和产生记录集 • 数据绑定 • 本例DataGrid控件要绑定不同的表,故需要通过代码设置控件的DataSource 属性。 Private Sub Command1_Click() Adodc1.RecordSource = "基本情况" Adodc1.Refresh End Sub Private Sub Command2_Click() Adodc1.RecordSource = "成绩表" Adodc1.Refresh End Sub • 程序代码
复杂数据绑定 例10.4使用SQL语句选择数据表部分数据构成记录集。在网格上绑定部分字段,需要对数据网格布局进行编辑。
10.3 记录集对象 10.3.1 浏览记录集 1. AbsoloutPostion属性 • 返回当前记录指针值,从1到Recordset对象所含记录数。 2. BOF和EOF的属性 • BOF判定记录指针是否在首记录之前,EOF判定记录指针是否在末记录之后。 • 如果BOF和EOF的属性值都为True,则记录集为空。
3. RecordCount属性 • 对Recordset对象中的记录计数,该属性为只读属性。 4. Find方法 • 在Recordset对象中查找与指定条件相符的一条记录,并使之成为当前记录。如果找不到,则记录指针指在记录集末尾。 • Recordset.Find 搜索条件[,[位移] , [搜索方向], [开始位置]]
5. Move方法组 • Move方法可代替对数据控件对象的4个箭头按钮的操作遍历整个记录集。 (1) MoveFirst方法移至第1条记录。 (2) MoveLast方法移至最后一条记录。 (3) MoveNext方法移至下一条记录。 (4) MovePrevious方法移至上一条记录。 (5) Move [n] 方法向前或向后移n条记录。 • 例10.5用命令按钮代替数据控件对象的4个箭头按钮的功能,使用Find方法查找记录
记录集属性方法小结 BOF 学号 姓名 专业 MoveFirst 500102 庄前 数学 MoveNext 500201 李明 物理 MovePrevious … … … MoveLast 500011 丁保华 计算机 EOF Adodc1.Recordset. Find "学号= '500011' "
10.3.2 记录集的编辑 1.数据编辑方法 • 记录集中数据的增、删、改涉及到4个方法: • AddNew方法 在记录集中增加入一个新行 • Delete方法 删除记录集中的当前记录 • Update方法 确定修改并保存到数据源中 • CancelUpdate方法 取消未调用Update方法前对记录所做的所有修改
增加新记录 2.增加新记录 (1) 调用AddNew方法增加一条空记录 (2) 给新记录各字段赋值(可以通过绑定控件直接输入,或使用程序代码给字段赋值,格式为:Recordset.Fields("字段名") = 值 (3) 调用Update方法,确定所做的添加,将缓冲区内的数据写入数据库
删除记录 3. 删除记录 (1) 定位被删除的记录使之成为当前记录 (2) 调用Delete方法 (3) 移动记录指针 • 注意:使用Delete方法当前记录立即删除,不加任何的警告或者提示。删除一条记录后,绑定控件仍旧显示该记录的内容。因此,必须移动记录指针刷新绑定控件
修改记录 4.修改记录 • 当改变数据项的的内容时,ADO自动进入编辑状态,在对数据编辑后,只要改变记录集的指针或调用Update方法,即可确定所做的修改。 • 例11.6在例10.5的基础上加入“新增”、“删除”、“更新”、“放弃”和“结束”5个按钮,通过对按钮的编程建立增、删、改功能
学号 姓名 专业 500102 庄前 数学 数据库 500201 李明 物理 学号 姓名 专业 … … … 500102 庄前 数学 500011 丁保华 计算机 500201 李明 物理 … … … 500011 丁保华 计算机 数据修改小结 UpData 填入新数据 Adodc1.Recordset. AddNew 增加记录 • 编辑记录 删除记录 • 给各字段赋值 调用Delete方法 • 调用Update方法 移动记录指针
10.3.3 查询与统计 • 通过SQL语句从数据源中获取信息,查询条件由Select语句的Where短语构成,使用And与Or运算符组合出复杂的查询条件。模糊查询使用运算符Like,百分号%代替任意个不确定的内容,用下划线_代替一个不确定的内容。 例如,姓名 Like '张%'将查询所有张姓的人员 • 例10.7 根据输入的专业名称,在网格内显示Student.mdb数据库中该专业所有学生信息
10.3.3 查询与统计 • 例10.8使用数据列表框或数据组合框提供专业名称,实现查询 • 例10.9使用SQL的函数和分组功能,统计各专业的人数、年龄分布。
10.3.4 BLOB数据处理 • 二进制大型对象(Binary Large Object,BLOB)是指任何需要存入数据库的随机大块字节流数据,例如图形或声音文件。数据库中存放BLOB的字段必须是二进制类型(在Access中为OLE对象),在ADO中如何处理BLOB类型的数据,把图形作为数据库的一个字段值存放在数据库,并能显示图形数据?
BLOB数据处理 • AppendChunk方法将BLOB数据写入数据库,语法格式: • ADO对象.Recordset.Fields(字段).AppendChunk Data • 用二进制访问方式打开BLOB数据文件 • 定义一个与文件长度相同大小的字节型数组 • 将文件保存到数组 • 使用ADO对象的AppendChunk方法写入数据库 • 例10.10选择指定图形文件将数据写入到数据库,在浏览记录时显示照片。
10.4 综 合 应 用 • 例10.11 设计一个多媒体信息管理系统,要求能将多媒体数据保存在数据库,具有记录的增加、删除、统计和多媒体信息重现等功能。 • 例10.12 设计一个飞行航班信息查询系统,要求具有记录的增加、编辑、删除、查询等功能
思考题 1.什么是关系型数据库? 2. 简述SQL中常用的Select 语句的基本格式和用法。 3. 简述使用ADO数据控件访问数据库的步骤。 4. 什么是数据绑定?怎样实现数据绑定? 5. 在ADO中如何用代码实现数据连接,创建一个记录集对象? 6.在ADO中如何用代码实现记录指针的移动? 7. 如何实现对记录集的增、删、改功能? 8. 如果要显示数据表内的照片,可使用哪些控件?