分享

VB程序设计数据库编程技术

 你喜欢那个 2012-05-13

教学目标及基本要求:

1、了解数据库的发展历程、基本概念及应用。

2、了解SQL语言的基本概念及构成。

3、掌握数据库的设计与管理。

4、掌握使用控件访问数据库的方法。

教学重点:

1、数据库的设计与管理。

2、使用控件访问数据库。

教学难点:

数据库的设计与管理、使用控件访问数据库。

教学内容:

1、数据库基础

2、数据库的设计与管理

3、使用控件访问数据库

4SQL简介

教学时间:

2学时

主要内容:

14 Visual Basic数据库编程技术

 

14.1 数据库基础

14.1.1 数据库的发展历程

第一代:网状、层次数据库

第二代:关系数据库

第三代:以面向对象模型为主要特征的数据库

14.1.2 数据库的基本概念

Visual Basic本身使用的是Access数据库,是关系数据库,数据库文件的扩展名为.MDB

1.表(关系):用于存储数据,以行列方式组织,是关系数据库的基本元素。

2.记录(行):指表中的一行。

3.字段(列):指表中的一列。每列均有字段名。

4.索引:索引是建立在表上的单独的物理数据库结构,基于索引的查询使数据库获取更为快捷。

5.关键字(主键):关系数据库中的某个字段或某些字段的组合。

6.视图:是一个与真实表相同的虚拟表,用于限制用户可以看到和修改的数据量,简化数据的表达。

14.1.3  数据库的应用

一个完整的数据库系统除了包括可以共享的数据库外,还包括用于数据处理的数据库应用系统。Visual Basic是一个功能强大的数据库开发平台,具有如下优点:

① 简单性。

② 灵活性。

可扩充性。

 

14.2 数据库的设计与管理

Visual Basic提供了一个非常实用的工具程序,即可视化数据管理器(Visual Data Manager),使用它可以方便地建立数据库、数据表和数据查询。

14.2.1           建立一个数据库

1.可视化数据库管理器的启动

Visual Basic集成环境中,执行“外接程序”菜单下的“可视化数据库管理器”命令,即可打开“可视化数据库管理器”VisData窗口。

2.创建Jet数据库

(1) 选择“文件”菜单中的“新建”项,将出现一个子菜单à选择数据库类型à选择数据库版本。

(2) 出现创建数据库对话框,在该对话框中选择保存数据库的路径和数据库文件名。

 (3) 单击“保存”按钮。

3. 编写代码建立数据库文件

Visual Basic应用程序中,还可以通过编写代码来建立一个数据库文件,以及对数据库进行索引、查询等许多操作。

14.2.2  建立数据表

使用可视化数据管理器建立数据库后,就可以向该数据库中添加数据表,还可以使用代码来创建表、字段及索引。

1. 建立数据表结构

具体操作步骤如下:

(1) 打开已经建立的Access数据库。

(2) 将鼠标指针移到“数据库窗口”区域内,单击鼠标右键出现快捷菜单,选择“新建表”命令,则出现“表结构”对话框,在对话框中输入相应数据。

(3) 单击“添加字段”打开“添加字段”对话框。

      (4) 单击“表结构”对话框中的“添加索引”按钮,将打开“添加索引”对话框。

2.修改表结构

 (1) 打开要修改的数据表的数据库。

(2) 在对话框中选择“设计”项,打开“表结构”对话框进行修改。

14.2.3  编辑数据表中数据

1. 输入记录

在“数据库窗口”中双击数据表,执行以下操作输入数据记录:

(1) 单击“添加”按钮,在打开的记录编辑窗口中输入该记录;

(2) 单击“更新”按钮,确认当前输入记录有效,即更新数据库;

(3) 逐条输入相应的记录,重复(2),确认输入;

(4) 单击“关闭”按钮,关闭数据库管理窗口。

2. 编辑记录

打开数据表管理窗口,先通过滚动条将要修改的记录定位为当前记录,单击“编辑”按钮,在弹出的对话框中输入新值后,再单击“更新”按钮。

3. 删除记录

打开数据表管理窗口,先通过滚动条将要删除的记录定位为当前记录,单击“删除”按钮,在弹出的对话框中单击“是”按钮,即可删除记录。

4. 过滤记录

打开数据表管理窗口,单击“过滤器”按钮后,在弹出的对话框中输入要过滤器表达式。

14.2.4           使用数据库记录和字段

1. Recordset对象

1Recordset对象类型

① 表类型:这种类型的Recordset对象直接表示数据库中的一个表。

② 动态集类型:这种类型的Recordset对象可以表示本地或链接表,也可以作为返回的查询结果。

③ 快照集类型:这种类型的Recordset对象所包含的数据、记录是固定的,它所表示的是数据库某一时刻的状况,就像照像一样。

2)创建Recordset对象

与创建数据库、表和字段一样,首先要定义对象变量。

3)删除Recordset对象

Recordset对象使用完毕后,就应该将它删除,也就是关闭已经打开的表,删除Recordset对象采用Close方法。

2. 增加、修改与删除记录

1)增加记录

增加记录首先要打开一个数据库和一个表,然后用AddNew方法创建一条新记录,AddNew语法格式为recordset.AddNew

2)修改记录

修改记录使用Edit方法, Edit方法的语法格式为recordset.Edit

3)删除记录

删除一条记录使用Delete方法,其语法格式为recordset. Delete

3. 移动记录指针

Recordset对象建立后,系统会自动生成一个指示器,指向表中的第一条记录,称之为记录指针。

1AbsolutePosition属性

在表中移动指针,最直接的方法就是使用AbsolutePosition属性,利用它可以直接将记录指针移动到某一条记录处。其语法格式为Recordset.AbsolutePosition=N

2BookMark属性

利用BookMark属性可以记下当前记录指针所在位置,当指针指向某一条记录时,系统就会产生惟一的标识符存在BookMark属性中,随着指针位置的变化,BookMark中的值也变化。通常先将BookMark中的值存在一个变量中,记住这个位置,然后指针移动,当需要时,可以再将变量中的值赋给BookMark,这样指针就可以移回原来的位置。

4. MoveMove系列方法

Visual Basic中使用MoveMove系列方法可以使指针相对于某一条记录移动,即做相对移动,。Move方法的语法格式为: Recordset.Move rows [,start]

其中,RecordsetRecordset对象变量,表示一个打开的表。rows表示要相对移动的行数,如果为正值,表示向下移动;若为负值,表示向上移动。start为一条记录的BookMark值,指示从哪条记录开始相对移动,如果这项不给出,则从当前记录开始移动指针。一般情况下这项可以省略。

5. 记录的查询

1Seek方法

在使用Seek方法之前需要先建立索引,并且要确定索引字段,然后通过与Seek方法给出的关键字比较,将指针指向第一条符合条件的记录。Seek方法的语法格式为:Recordset.Seek=比较运算符,关键字1,关键字2

其中,RecordsetRecordset对象变量,表示一个打开的表。比较运算符用于比较运算,比如:“<”,“>”,“=”,“>=”,等等。关键字为当前主索引的关键字段,如果有多个索引,则关键字段可以给出多个。

2Find方法

Seek方法可以定位符合条件的第一条记录,当需要用特殊方法定位记录时,可以使用Find方法。其语法格式分别为:

Recordset. FindFirst 条件表达式

Recordset. FindLast条件表达式

Recordset. FindNext条件表达式

Recordset. FindPrevious条件表达式

其中,RecordsetRecordset对象变量,表示一个打开的表。

注意:

SeekFind后面给出关键字时要与索引字段的类型一致,否则将找不到需要的记录。

 

14.3 使用控件访问数据库

14.3.1  Data控件

1. 在窗体上添加Data控件

双击工具箱中Data控件图标 或单击后在窗体上拖动出控件大小,都可以看到Data控件的外观。

 

  2. Data控件的常用属性

(1) Connect属性:用来确定Data控件所连接的数据库类型,默认属性值是Access

(2) DatabaseName属性:确定选择要访问数据库文件。

(3) RecordSource属性:确定要访问的数据源。该属性值可以是数据库中的某一个数据表,也可以是一条SQL查询语句。

3. 其他常用属性

(1) RecordsetType属性:确定Recordset(记录集)对象的类型。可以选择的记录类型有三种,即表类型记录集(0-Table默认值)、动态类型记录集(1-Dynaset)及静态类型记录集,静态类型记录集又常称为快照类型记录集(2-SnapShot)。

(2) Exclusive属性:确定是否按照独享方式打开数据库,在需要多用户访问数据库时需要将该属性值设置为False

(3) Options属性:用来决定记录集的特征。例如,在一个多用户环境中,可以设置Options属性来禁止他人所做的修改。

(4) BOFActionEOFAction属性:这两个属性决定当该控件位于光标开始(记录集的EOF属性值为True)或末尾(记录集的BOF属性值为True)时的行为。

4. Data控件常用的方法

1AddNew方法

AddNew用于添加一个新记录,新记录的每个字段如果有默认值将以默认值表示,否则为空白。

2Delete方法

Delete用于删除当前记录的内容,在删除后应将当前记录移到下一条记录。

3Edit方法

Edit用于对当前记录进行编辑修改。

4Find方法群组

Find方法群组用于查找记录,它包含FindFirstFindLastFindNextFindPrevious方法,这4种方法查找的起点不同。

5Move方法群组

Move方法群组用于移动记录,它包含MoveFirst(移到第一条记录)、MoveLast(移到最后一条记录)、MoveNext(移到下一条记录)和MovetPrevious(移到前一条记录)方法。

6Refresh

如果DatabaseNameReadOnlyExclusiveConnect属性的设置值发生改变,可以使用Refresh方法打开或重新打开数据库,用Refresh方法可以更新数据控件的集合内容。

7Seek方法

Seek方法适用于数据表类型(Table)记录集,通过一个已被设置为索引(Index)的字段,查找符合条件的记录,并使该记录为当前记录。

8Update方法

Update方法用于将修改的记录内容保存到数据库中。该方法一般用在AddNew方法、Edit方法之后。

9UpdateControls方法

UpdateControls方法可以从数据控件的记录集中再取回原先的记录内容,即恢复原先值。

10Close方法

Close方法用于关闭记录集。该方法也能用在数据库对象上,将数据库关闭。

5. Data控件常用的事件

1Reposition事件

Reposition事件是当某一个记录成为当前记录之后触发。通常利用该事件对当前记录的数据内容进行计算,触发该事件有以下几种原因:

① 单击数据控件的几个按钮,进行记录移动;

② 使用Move方法群组;

③ 使用Find方法群组;

④ 其他可改变当前记录的属性或方法。

事件过程如下:

Private Sub Data1_Reposition()

     '事件处理程序

End Sub

2Validate事件

Validate事件与Reposition事件不同,是当某一记录成为当前记录之前,或是在UpdateDeleteUnloadClose操作之前触发。

事件过程如下:

Private Sub Data1_Validate(Action As Integer, Save As Integer)

     '事件处理程序

End Sub

其中,Action用来指示引发这种事件的操作;Save用来指定链接的数据是否修改了。

3Error事件

Data控件产生执行错误时触发。事件过程如下:

Private Sub Data1_Error (DataErr As Integer, Response As Integer)

     '事件处理程序

End Sub

其中,DataErr为返回的错误号;Response设置执行的动作,0表示继续执行,1表示显示错误信息。

6. 与控件绑定

控件箱中的常用控件PictureBoxLabelTextBoxCheckBoxImageOLEListBoxComBox控件都与DataRecordset的一个字段绑定,与Data控件绑定的控件称为数据感知控件。

1)数据感知控件的相关属性

DataSource属性:用于在下拉列表中选择想要绑定的控件名称。

DataField属性:用于在下拉列表中选择要显示的字段名称。

2)绑定数据控件的步骤

① 将数据控件(Data1)放置在窗体中,将数据感知控件TextBox放置在窗体中并改名为“图书编号”。

② 设置Data1DatabaseName属性为"d:\tsgl\xxjs_book.mdb"文件,设置Data1Record-Source属性为"library"表。

③ 设置“图书编号”的DataSource属性为Data1,设置“图书编号”的DataField属性为“图书编号”字段。

14.3.2  DBGrid控件

1. DBGrid控件浏览数据表

在使用DBGrid控件之前,必须通过“工程”菜单的“部件”选取Microsoft DataGrid Control 6.0SP6)。

DBGrid控件依靠两个对象:Data控件的Recordset对象和DBGrid本身的Columns集合。DBGrid控件实际上是Columns对象的集合,其中每个对象都有不同数量的行,每一列对应着数据库表的一个字段,而每一行则对应一个记录。

2. DBGrid控件浏览和显示数据表的步骤

(1) 在新窗体中添加一个数据控件(Data1),再设置其DatabaseName属性和RecordSource属性为要显示的数据库和表。

(2) 在窗体中添加一个DBGrid控件,并设置DatabaseSource为刚创建的Data控件。

(3) 设置DBGrid控件的其他相关属性。

(4) 运行程序。

3. DBGrid控件的运行操作

在运行时,DBGrid控件从基本Recordset对象中显示记录。

14.3.3  ADO Data控件

ADO Data控件不是Visual Basic的内部控件,在使用之前可以通过单击“工程”菜单中的“部件”命令或用鼠标右键单击控件箱,在快捷菜单中选择“部件”命令,打开“部件”对话框选择“Microsoft ADO Data Control6.0Sp6)(OLEDB)”复选框,则在控件箱中增加了ADO Data控件(Adodc)的图标 ,单击它可快速建立数据绑定控件和数据提供者之间的连接。

1. ADO Data控件的功能

(1) 连接一个本地数据库或远程数据库。

(2) 打开一个指定的数据库表,或定义一个基于结构化查询语言(SQL)的查询、存储过程或该数据库中的表的视图的记录集合。

(3) 将数据字段的数值传递给数据绑定控件,可以在这些控件中显示或修改这些数值。

(4) 添加新记录,或根据修改显示在绑定的控件中的数据来更新一个数据库。

2. ADO Data控件的属性

 (1) ConnectionString属性:用于连接字符串,可以包含进行一个连接所需的所有设置值,该字符串所传送的参数与驱动程序有关。

(2) UserName属性:用于指定用户的名称,当数据库受密码保护时,需要在ConnectionString中指定属性。。

(3) RecordSource属性:用于设置要链接的表或一条SQL查询语句。可以在“属性”窗体中将“记录源”的属性设置为一个SQL语句。

(4) CommandType属性:用于指定RecordSource属性的取值类型。告诉数据提供者Source属性是一条SQL语句、一个表的名称、一个存储过程,还是一个未知的类型。

(5) Password属性:用于指定密码,在访问一个受保护的数据库时是必需的。与ProviderUserName属性类似,如果在ConnectionString属性中指定了密码,那么将覆盖此属性中指定的值。

(6) CursorType属性:用于决定记录集是静态类型、动态类型还是键集光标类型。

(7) Mode属性:用于决定想用记录集进行什么操作,只读、读写还是其他设置。

(8) ConnectionTimeout属性:用于设置等待建立一个连续的时间,以秒为单位。如果连接超时,则返回一个错误。

(9) BOFActionEOFAction属性:用于决定当控件位于光标开始和末尾时的行为。

3. ADO Data控件对记录的操作方法

 (1) AddNew方法:用于在ADO Data控件的记录集中添加一条新记录,其使用语法为:Adodcname.Recordset.AddNewAdodcname是一个ADO Data控件的名称。

(2) Edit方法:用于在ADO Data控件的记录集中对当前记录进行修改,其使用语法为:Adodcname.Recordset.Edit修改后调用Update方法保存记录。

(3) Delete方法:用于在ADO Data控件的记录集中删除当前记录,其使用语法为:Adodcname.Recordset.Delete

(4) Update方法:用于把内存缓冲区中的内容写进数据库文件,保存对数据库所做的改动,该方法一般用在AddNew Edit方法之后。其使用语法为:Adodcname.Recordset.Update

(5) Move方法群组:Move方法群组是用于在ADO Data控件的记录集中移动记录。MoveFirstMoveLastMoveNextMovetPrevious分别移到第一条记录、最后一条记录、下一条记录和上一条记录,其使用语法为:

Adodcname.Recordset.Move 8   '从当前记录开始向下移动8条记录

Adodcname.Recordset. MoveFirst       移动到第一条记录

Adodcname.Recordset. MoveLast        移动到最后一条记录

Adodcname.Recordset. MoveNext        从当前记录移动到下一条记录

Adodcname.Recordset. MovetPrevious  从当前记录移动到上一条记录

(6) Close方法:用于关闭记录集,其使用语法为Adodcname.Recordset.close

4. ADO Data控件的事件

 (1) WillMoveMoveComplete事件:WillMove事件是在当前记录的位置即将发生时触发,而MoveComplete事件是在位置改变完成时触发。

(2) WillChangeFieldFiledChangeComplete事件:WillChangeField事件是在当前记录集中当前记录的一个或多个字段发生变化时触发,而FiledChangeComplete事件则是当字段的值发生变化完成后触发。

(3) WillChangeRecordRecordChangeComplete事件:WillChangeRecord事件是当记录集中的一个记录或多个记录发生变化前触发,而RecordChangeComplete事件则是当记录发生变化完成后触发。

 

14.3.4  ADO编程模型

ADO的核心是CommandRecordSetConnection对象。它们之间的关系是Command对象、RecordSet对象必须先通过Connection对象来建立数据源连接。

(1) Connection对象:Connection对象用于建立与数据源的连接。

(2) Command对象:在建立Connection后,可以发出命令对数据源进行操作。

(3) RecordSet对象:RecordSet对象只代表记录集,是基于某一连接的表或是Command对象的执行结果。

在使用ADO对象编程之前,要将ADO函数库设置为引用项目,通过单击“工程”菜单中的“引用”命令,选择“Microsoft ActiveX Data Object 2.1 Library”复选框。还可以使用代码编程来对ADO对象模型的CommandRecordSetConnection对象进行操作。程序代码如下:

Option Explicit      '在通用声明定义

Private cnBook AS New ADODB.Connection

Private cmBook AS NEW ADODB. Command

Private rsBook AS NEW ADODB. RecordSet

利用ADOCommand对象、RecordSet对象和Connection对象进行编程的模型使用如下步骤:

① 创建Connection对象,设置好连接字符串(ConnectionString属性),并使用Open方法与数据源建立连接。

② 创建Command对象,并设置该对象的活动连接(ActiveConnection属性),为上一步已建好的Connection对象,指定要执行的数据库操作命令(CommandText属性),命令可以是任意的SelectInsertUpdate语句等。

③ 使用Command对象的Execute方法执行命令,如果是查询命令,该方法会返回一个RecordSet对象。

④ 将上一步返回的RecordSet对象保存到变量中,并利用该变量来处理记录。

⑤ 使用Close方法关闭与Connection对象和RecordSet对象关联的系统资源(与Open方法相反),此时对象可以继续使用。

使用Set对象=Nothing来彻底删除每个对象,对象删除后必须重新创建才能再使用。

 

14.4  SQL简介

 14.4.1  SQL概述

SQL是关系数据库的标准语言,是一种综合的、通用的、功能强大的及简单易学的语言,它的主要特点:

1. 综合统一

SQL集数据定义(Data Define)、数据查询(Data Query)、数据操纵(Data Manipulation)和数据控制(Data Control)功能于一体。

2. 面向集合的操作方式

SQL采用面向集合的操作方式,无论是查询操作,还是删除、插入及更新操作,它操作的对象和结果都是一个记录的集合。

3. 高度非过程化

SQL是非过程化的语言,在使用SQL进行数据库操作时,只须提出“做什么”,而不需要说明“该怎么去做”。

4. 同一种语法结构提供两种执行方式

SQL既是一种自含式语言,又是一种嵌入式语言。它既可以独立地采用联机交互的方式对数据库进行操作,也可以潜入到高级语言程序中。

5. 语言简洁、易学易用

 

 14.4.2  SQL的构成

SQL由命令、子语句、运算符和函数等基本元素构成,通过这些元素组成语句对数据库进行操作。

1. SQL命令

SQL对数据库所进行的数据定义、数据查询、数据操纵和数据控制等操作都是通过SQL命令实现的,常见的SQL命令见表14-2

14-2                       常用的SQL命令

   

功 能 说 明

   

功 能 说 明

SELECT

用于在数据库中查找满足某特定条件的记录

DROP

用于删除数据库中的表和索引

CREATE

用于创建新的表、字段和索引

ALTER

用于通过添加字段或修改字段来修改表

INSERT

用在数据库中添加记录

UPDATE

用于改变指定记录和字段的值

DELETE

用于从数据库表中删除记录

 

 

2. 子句

SQL命令中的子句是用来修改查询条件的,通过它可以定义要选择和要操作的数据,常用的SQL子句见表14-3

14-3                       常用的SQL子句

   

功 能 说 明

   

功 能 说 明

FROM

用来指定需要从中选择记录的表名

HAVING

用来指定每个群组需要满足的条件

WHERE

用来指定选择的记录需要满足的条件

ORDER BY

按指定的次序对记录排序,ASC为升序DESC为降序

GROUP BY

用来把所选择的记录分组

 

 

3. 运算符

SQL运算符见表14-4

14-4                      常用的SQL运算符

   

功 能 说 明

比较运算符

<<=>>=< >=

分别为小于、小于或等于、大于、大于或等于、不等于、等于

BETWEEN

用来判断表达式的值是否在指定值的范围

LIKE

在多个、单个、特定字符、单个数字、范围或范围之外等匹配种类模式中使用

IN

用来判断表达式的值是否在指定的列表中出现

逻辑运算符

AND

逻辑与

OR

逻辑或

NOT

逻辑非

4. 函数

SQL所提供的统计函数见表14-5

14-5                      SQL常用统计函数

   

功 能 说 明

   

功 能 说 明

SUM

用于返回指定段中值的总和

MIN

用于返回指定段中的最小值

COUNT

用于计算所选择记录的个数

AVG

用于计算指定段中值的平均数

MAX

用于返回指定段中的最大值

 

 

 

14.4.3  SQLVisual Basic中的应用

1. 建立、修改或删除Access数据库中的表

语法:CREATE TABLE 数据表([字段名称1]数据类型(长度),[字段名称2]数据类型(长度)

例如,建立S_BOOK数据表

CREATE  TABLE  S_book ([书名] text 40),[书号] Text (5))

2. 建立或删除Access数据库中表的索引

语法:DROP {TABLE 数据表/INDEX index ON数据表}

例如,从用户列表中,删除编号索引 / 从数据库中,删除整个表

DROP INDEX MyIndex ON 用户列表 / DROP TABLE 用户列表

3. 对记录进行插入、删除或更新操作

语法:INSERT INTO 数据表(字段名1,字段名,VALUE(数据1,数据2

DELETE (字段名)FROM 数据表 WHERE 子句

(其中,字段名可以省略,因为一般都是删除整条记录)

UPDATE (字段名) SET 新数据值 WHERE 子句

例如,将数据表S_BOOK中所有“数量”少于10的字段都改为10

UPDATE S_BOOK SET数量=10 WHERE数量<10

4. 从一个或多个数据库的一个或多个表中获取数据

语法:SELECT 字段列表FROM子句WHERE子句GROUP BY子句HAVING子句ORDER BY子句。

例如,选择图书信息表S_BOOK中“书名”字段含有“计算机”的书,并按升序排列书号。

SELECT * FROM S_BOOK WHERE S_BOOK.书名 LIKE '计算机*'ORDER BY书号DESC

5. 对表中数据进行统计,比如求和、求最大/最小值、计数、求平均值等

语法:SELECT COUNT字段列表 AS xx FROM 子句 WHERE子句

例如,查询英语成绩不及格的人数、英语平均分及最高分

SELECT COUNT * AS 人数 FROM 成绩表 WHERE 数学<60

SELECT AVG 数学 AS平均分, MAX 数学 AS 最高分 FROM 成绩表

 

小结:

数据库用于储存结构化数据,它的应用无处不在。Visual Basic不仅具有强大的数据库操作功能,而且是一个优秀的数据库开发平台,提供了包含数据管理器(Data Management)、数据控件(Data Control)以及ADC(ActiveX 数据对象)等功能强大的工具,利用Visual Basic能够开发各种数据库应用系统,建立多种类型的数据库,并可以管理、维护和使用这些数据库。

 

作业:

1.数据表、字段、记录与数据库的关系如何?

2.怎样使用“可视化数据库管理器”来建立和修改数据库?

3.在使用Find方法查找记录时,如何判断查找是否成功?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多