1、 10.1 数据库的概念数据库的概念例例 10_1 某数据库中包含三个表某数据库中包含三个表教师号教师号教师名教师名系系教研组教研组0036蔡培元 计算机软件0321梁丽娟 机电模具1054李志平 土木工程1030黄历凉11230873例例 10_1 某数据库中包含三个表某数据库中包含三个表课程号课程号课程名课程名学学 时时学分学分层次层次0101计算机原理855本科0102程序设计724本科0103软件测试540104工具与环境0105例例 10_1 某数据库中包含三个表某数据库中包含三个表班级号班级号课程号课程号教师号教师号上课时间上课时间课室号课室号0209101020036周二3432
2、030209201020036周二343203010110107032101074011101151例例 10_1 某数据库中包含三个表某数据库中包含三个表SQL Structured Query Language(结(结构化查询语言)是最重要的关系数据库操作语言。构化查询语言)是最重要的关系数据库操作语言。SQL语言不是一个完整的程序设计语言。它没语言不是一个完整的程序设计语言。它没有用于控制程序分支的有用于控制程序分支的GOTO语句,也没有用于控语句,也没有用于控制循环的制循环的DO或或For语句。它主要包括创建、更新语句。它主要包括创建、更新和操作数据库中的数据的语句。和操作数据库中的数
3、据的语句。10.2.1 SQL的语句的语句 10.2.2 SQL中的数据操作中的数据操作10.2 关系数据库操作语言关系数据库操作语言SQL简介简介DDL语句用于创建和定义新的数据库表,字段和索引。DML语句用于检索,更新和插入数据。SELECT DISTINCT FROM ,WHERE GROUP BY HAVING ORDER BY ASC/DESC SQL子句子句例例 10_2 查看教师表中的全部数据查看教师表中的全部数据.SELECT*FROM 教师教师在此,*代表全部字段的字段名。这是简化的写法,等价于:SELECT 教师号教师号,教师名教师名,系系,教研组教研组FROM 教师教师检
4、索结果返回一张表。例例 10_3 查看教师表中的全部教师的编号、姓名和查看教师表中的全部教师的编号、姓名和所在系所在系SELECT 教师号教师号,教师名教师名,系系,FROM 教师教师例例 10_4 在教师表中检索计算机系的教师在教师表中检索计算机系的教师SELECT*FROM 教师教师 WHERE 系系=“计算机计算机”例例 10_5 在课程表中查找学时数在课程表中查找学时数75大于,小于大于,小于90的课的课程的课程名、学时数和学分数。程的课程名、学时数和学分数。SELECT 课程名课程名,学时学时,学分学分 FROM 课程课程 WHERE学学时时WHERE75 And 学时学时90。例例
5、 10_6 在教师表中收集姓梁的教师的材料。在教师表中收集姓梁的教师的材料。SELECT*FROM 教师教师 WHERE 教师名教师名 LIKE“梁梁%”例例 10_7 查询星期二第查询星期二第3、4节上课的教师名和课程名节上课的教师名和课程名SELECT 排课排课.上课时间上课时间,教师教师.教师名教师名,课程课程.课程名课程名 FROM排课,教师,课程排课,教师,课程 WHERE排课排课.上课时间上课时间“周二周二3-4”And 课程课程.课程名排课课程名排课.课程号课程号 And 教师教师.教师号排课教师号排课.教师号教师号本查询中用了三个表。为了区别下同表中的同名字段,本查询中用了三个
6、表。为了区别下同表中的同名字段,使用格式:使用格式:.例例 10_8 在课程表中使用在课程表中使用”GROUP BY”,按课程名分按课程名分组。组。SELECT 课程名课程名,SUM(学时学时),SUM(学分学分)FROM 课程课程 GROUP BY课程名课程名例例 10_9 在课程表中使用在课程表中使用”GROUP BY”按课程名分按课程名分组后,使用组后,使用HAVING提取同组课程学时之和提取同组课程学时之和70大于的大于的行行SELECT 课程名课程名,SUM(学时学时),SUM(学分学分)FROM 课程课程 GROUP BY课程名课程名HAVING SUM(学时)(学时)70(1)U
7、PDATE语句语句例例 10_10 把课程表中每门课程增加把课程表中每门课程增加18学时,增加学时,增加1个学个学分。分。UPDATE 课程课程SET学时学时学时学时+18,学分,学分+1例例 10_11 把把0102号课程星期二号课程星期二3,4节的课改为星期一节的课改为星期一3,4节,地点不变。节,地点不变。UPDATE 排课排课SET止课时间止课时间“周一周一34”WHERE 课程号课程号“0102”And 上课时间上课时间“周二周二34”(2)INSERT语句语句格式:格式:INSERT INTO (,)VALUES(,)(3)DELETE语句语句格式:格式:DELETE FROM W
8、HERE 例例 10_12 在教师表中增加一个教师。在教师表中增加一个教师。INSERT INTO 教师教师(教师号,教师名,系,教研组教师号,教师名,系,教研组)VALUES(“1031”,”余佩玉余佩玉”,“电信工程电信工程”,“系系统统”)例例 10_13 删除排课表中全部数据。删除排课表中全部数据。DELETE FROM 排课排课例例 10_14 从教师表中删除从教师表中删除0873号教师的记录。号教师的记录。DELETE FROM 教师教师 WHERE 教师号教师号=“0873”10.3 Visual Basic 中的数据库操作中的数据库操作用户界面用户界面Jet引擎引擎数据库数据库
9、用户界面用户界面数据库引擎数据库引擎数据库数据库客户机客户机/服务器服务器服务器服务器客户机客户机服务器服务器客户机客户机用户界面用户界面数据库引擎数据库引擎数据库数据库远程远程1.表(表(Table)类型)类型2.动态集(动态集(DynaSet)类型)类型3.快照(快照(SnapShot)类型)类型2.使用可视化数据管理器建立数据库使用可视化数据管理器建立数据库例例 10_15 新建取名为新建取名为“排课信息排课信息.mdb”的数据库的数据库并在其中建立名为并在其中建立名为“课程课程”的表。的表。“课程课程”表的表的内容为表内容为表10-2所示。所示。单击此处单击此处存储路径存储路径数据库名
10、数据库名单击此处单击此处数据库路数据库路径和名字径和名字下面开始在数据库中建立表。下面开始在数据库中建立表。右击可弹右击可弹出菜单出菜单单击这里单击这里单击这里单击这里Text类型类型需设长度需设长度添加索引添加索引单击这里则单击这里则可生成表可生成表 RecordSet 要移动其中记录指针的那一个记录集要移动其中记录指针的那一个记录集一是创建对象变量;一是创建对象变量;二是通过设置对象的属性,调用对象的方法来操作二是通过设置对象的属性,调用对象的方法来操作它们它们Here例例10_16 对数据库文件对数据库文件“排课信息排课信息.mdb”中中的的“课程课程”表进行操作,功能包括记录的浏表进行
11、操作,功能包括记录的浏览、添加、查找合乎条件的记录并且删除。览、添加、查找合乎条件的记录并且删除。第一步:第一步:新建一工程,按上页的方法引用新建一工程,按上页的方法引用Microsoft DAO 3.51 Object Library。第二步:第二步:界面设计:界面设计:本例由一个窗体、本例由一个窗体、5个标签、个标签、5个文本框和个文本框和6个命个命令按钮组成。令按钮组成。Command1-Command4Command5第三步:代码第三步:代码Dim db As Database,rs As RecordsetPrivate Sub Form_Load()Set db=OpenDatab
12、ase(App.Path&排课信息排课信息.mdb)Set rs=db.OpenRecordset(课程课程,dbOpenTable)rs.Index=课程索引课程索引 Call recshowEnd SubPrivate Sub recshow()On Error GoTo err Text1.Text=rs.Fields(课程号课程号)Text2.Text=rs.Fields(课程名课程名)Text3.Text=rs.Fields(学时学时)Text4.Text=rs.Fields(学分学分)Text5.Text=rs.Fields(层次层次)Exit Suberr:MsgBox Erro
13、r!End SubPrivate Sub Command1_Click()rs.MoveFirst Call recshowEnd SubPrivate Sub Command2_Click()rs.MoveNext Call recshowEnd SubPrivate Sub Command3_Click()rs.MovePrevious Call recshowEnd SubPrivate Sub Command4_Click()rs.MoveLast Call recshowEnd SubPrivate Sub Command5_Click()rs.AddNew rs.Fields(课程
14、号课程号)=InputBox(请输入课程号请输入课程号,添加记录添加记录)rs.Fields(课程名课程名)=InputBox(请输入课程名请输入课程名,添加记录添加记录)rs.Fields(学时学时)=InputBox(请输入学时数请输入学时数,添加记录添加记录)rs.Fields(学分学分)=InputBox(请输入学分数请输入学分数,添加记录添加记录)rs.Fields(层次层次)=InputBox(请输入层次级别请输入层次级别,添加记录添加记录)rs.Update rs.MoveLast Call recshowEnd SubPrivate Sub Command6_Click()Di
15、m str1 As String str1=InputBox(请输入要删除的课程号请输入要删除的课程号,删除对话框架删除对话框架)rs.Seek=,str1 rs.Delete Call Command2_Click Call recshowEnd Sub例例 10_17对数据库文件对数据库文件“排课信息排课信息.mdb”中的中的“课程课程”表进行操作。功能包括记录的移动,修改表进行操作。功能包括记录的移动,修改与添加新记录。与添加新记录。本例无需编写代码。人机界面由一个窗体,一个Data控件,五个标签和五个文本框组成。各控件属性值请见课本389页。Microsoft公司制定了一个称为公司制定
16、了一个称为OLEDB的数据的数据技术标准,目的是使用各种不同的编程语言,以技术标准,目的是使用各种不同的编程语言,以统一的方式访问存储在不同信息源中的数据。这统一的方式访问存储在不同信息源中的数据。这些信息源范围广泛,从简单的文本文件到复杂的些信息源范围广泛,从简单的文本文件到复杂的异种数据库。异种数据库。Microsoft公司用一组组件对象模型公司用一组组件对象模型(COM,Component Object Model)接口实现这接口实现这个任务。这一组接口是系统级的编程接口,功能个任务。这一组接口是系统级的编程接口,功能齐备,但使用手续复杂。齐备,但使用手续复杂。Microsoft公司在公
17、司在OLEDB之上建立一套基于对象的应用级编程接口,是之上建立一套基于对象的应用级编程接口,是连接应用程序和连接应用程序和OLEDB的桥梁,这就是的桥梁,这就是ADO(Active X Data Objects)。Microsoft OLE DB 可以访问的数据种类很多,可以访问的数据种类很多,甚至不一定是传统意义的数据库。甚至不一定是传统意义的数据库。OLEDB模模型中有一个重要的逻辑部件叫型中有一个重要的逻辑部件叫“提供者提供者”,OLEDB为它所支持的每种数据源准备了一个为它所支持的每种数据源准备了一个“提供者提供者”。ADO通过这些通过这些“提供者提供者”以统一以统一方式,访问存储在不
18、同信息源中的数据。方式,访问存储在不同信息源中的数据。Connection(连接),连接),Command(命令)和命令)和RecordSet(记录集)是顶层对象,可以各自独立地记录集)是顶层对象,可以各自独立地创建或删除。创建或删除。Parameter(参数)对象可以独立创建,参数)对象可以独立创建,但作用前必须与但作用前必须与Command对象联系起来。对象联系起来。Field(字段),字段),Error(错误),和错误),和Property(属性)(属性)对象只能依存于它们的父对象,不能独立创建。对象只能依存于它们的父对象,不能独立创建。ADO由七个对象组成。由七个对象组成。Connec
19、tionRecordsetCommandErrorPropertiesPropertiesParametersPropertiesFiledsPropertiesConnection对象包含某个数据提供者的信息,对象包含某个数据提供者的信息,代表与数据源的一次连接过程。对任何数据源的操代表与数据源的一次连接过程。对任何数据源的操作要有一个作要有一个Connection对象。对象。Command对象定义将要对数据源执行的一条对象定义将要对数据源执行的一条数据操作命令。当数据提供者是关系数据库时,这数据操作命令。当数据提供者是关系数据库时,这就是一个就是一个SQL语句。语句。RecordSet对象
20、是数据操作的真正接口,其对象是数据操作的真正接口,其类型、意义和功能与前面讨论的类型、意义和功能与前面讨论的DAO中的同名对象中的同名对象相同。相同。每个顶层每个顶层ADO对象都包括对象都包括Property对象的集对象的集合。合。Property对象使对象使ADO能够动态地展示特定提供能够动态地展示特定提供者的性能者的性能与与ADO数据访问对象配套的控件是数据访问对象配套的控件是“Microsoft ADO Data Control 6.0(OLEDB)”。使用前要把这个使用前要把这个“ADO数据控件数据控件”添加到工具箱中添加到工具箱中方法是在方法是在“工程工程”菜单中单击菜单中单击“部件
21、部件”命令,在弹命令,在弹出的对话框中选择出的对话框中选择“部件部件”标签,然后在列表框中标签,然后在列表框中选择选择“Microsoft ADO Data Control 6.0(OLEDB)”选项。选项。放在窗体上的放在窗体上的“ADO数据控件数据控件”的外观和的外观和操作方法都与操作方法都与10.3.2小节所述的小节所述的“Data控件控件”类类似。它提供似。它提供ADO数据访问对象的部分功能。只要数据访问对象的部分功能。只要在在“设计模式设计模式”下,设定它的下,设定它的4个属性,无需编个属性,无需编程就可实现在一个表中前后移动记录指针,浏览、程就可实现在一个表中前后移动记录指针,浏览
22、、修改和添加空记录。与修改和添加空记录。与Data控件一样,控件一样,AD为为O数数据控件本身不能显示数据,需要使用它的据控件本身不能显示数据,需要使用它的“依附依附”控件来显示数据。控件来显示数据。ConnectionString设置或返回字符串值,用来建立数据设置或返回字符串值,用来建立数据源的连接信息。该字符串由一系列源的连接信息。该字符串由一系列“argument=value”形式的形式的参数构成,参数间用分号分隔。参数构成,参数间用分号分隔。ADO支持支持ConnectionString属性的属性的4个参数如下:个参数如下:Provider=提供者的名字提供者的名字Data Sour
23、ce=数据源的名称(含路径)数据源的名称(含路径)RemoteProvider=打开客户端连接时使用的提供者名称打开客户端连接时使用的提供者名称Remote Server=服务器的路径名称服务器的路径名称CommandType设置或返回整数,指出命令类型。常设置或返回整数,指出命令类型。常数意义如下:数意义如下:1AdCmdText命令文本内容为命令文本内容为SQL语句语句2AdCmdTable命令文本内容为表名命令文本内容为表名3AdCmdStoredProc 命令文本内容为存储过程名命令文本内容为存储过程名4AdCmdUnknown命令文本内容未知命令文本内容未知RecordSource一
24、个字符串表达式,指定一个记录源,一个字符串表达式,指定一个记录源,可能是表名,可能是返回一个记录集的可能是表名,可能是返回一个记录集的SQL查询,总之其查询,总之其内容应相当于一个记录集内容应相当于一个记录集EOFAction取值会和意义见上一节取值会和意义见上一节“Data控件控件”的同的同名属性名属性使用使用ADO数据控件建立应用程序,就是适当地设数据控件建立应用程序,就是适当地设定定ADO数据控件和依附控件的属性,使数据控件和依附控件的属性,使ADO数据数据控件绑定记录集,成为这个控件绑定记录集,成为这个“记录源记录源”的的“代代理理”,向,向“依附控件依附控件”供应数据。供应数据。“依
25、附控件依附控件”绑定记录集当中的一个字段,显示记录集的绑定记录集当中的一个字段,显示记录集的“当当前记录前记录”里面该字段的内容。里面该字段的内容。例例 10_18本例功能与例本例功能与例1017完全相同,即对数完全相同,即对数据库文件据库文件“排课信息排课信息.mdb”中的中的“课程课程”表进行操表进行操作。功能包括记录的移动,修改与添加新记录。作。功能包括记录的移动,修改与添加新记录。本例无需编写代码。人机界面由一个窗体,一个ADO数据控件,五个标签和五个文本框组成。各控件属性值请见课本393页。用用“ADO数据访问对象数据访问对象”编程通常包括两部编程通常包括两部分:一是建立分:一是建立
26、ADO对象变量,二是利用对象的属对象变量,二是利用对象的属性和方法实现下列任务。性和方法实现下列任务。连接到数据源。连接到数据源。指定访问数据源的命令。指定访问数据源的命令。执行命令。执行命令。如果执行命令的结果返回一个表,则把该表保存在如果执行命令的结果返回一个表,则把该表保存在“缓存缓存”中。中。使用缓存的更改内容,更新数据源。使用缓存的更改内容,更新数据源。提供常规方法检测错误提供常规方法检测错误例例 10_19本例功能是顺序浏览数据库文件本例功能是顺序浏览数据库文件“排课排课信息信息.mdb”里的里的“课程课程”表中的记录。表中的记录。界面由界面由1个窗体,个窗体,5个标签,个标签,5
27、个文本框和个文本框和4个命令按个命令按钮组成。钮组成。界面由一个窗体,五个标签和五个文本框和4个命令按钮组成。注:运行本例前需在“部件”中先添加ADO数据控件。Dim conn As New ADODB.ConnectionDim cmd As New ADODB.CommandDim rs As New ADODB.RecordsetPrivate Sub recshow()Text1.Text=rs.Fields(课程号课程号)Text2.Text=rs.Fields(课程名课程名)Text3.Text=rs.Fields(学时学时)Text4.Text=rs.Fields(学分学分)Te
28、xt5.Text=rs.Fields(层次层次)End SubPrivate Sub Command1_Click()rs.MoveFirst Call recshowEnd SubPrivate Sub Command2_Click()rs.MoveNext If rs.EOF Then rs.MoveLast Call recshowEnd SubPrivate Sub Command3_Click()rs.MovePrevious If rs.BOF Then rs.MoveFirst Call recshowEnd SubPrivate Sub Command4_Click()rs.M
29、oveLast Call recshowEnd SubPrivate Sub Form_Load()conn.Open Provider=Microsoft.Jet.OLEDB.3.51;_Data Source=排课信息排课信息.mdb Set cmd.ActiveConnection=conn cmd.CommandType=adCmdText cmd.CommandText=SELECT*FROM 课程课程 rs.Open cmd,adOpenDynamic rs.MoveFirst Call recshowEnd SubOpen方法(方法(ADOConnection 对象)对象)功能:
30、打开到数据源的连接。功能:打开到数据源的连接。格式:格式:Connection.Open,_,参数:参数:ConnectionString可选,字符串,包含连接信息。可选,字符串,包含连接信息。UserID可选,字符串,包含建立连接时使用的用户名称。可选,字符串,包含建立连接时使用的用户名称。Password可选,字符串,包含建立连接时所用密码。可选,字符串,包含建立连接时所用密码。OpenOptions可选,可选,ConnectOptionEnum值。如果值。如果设置为设置为dConnectAsync(16),则异步打开连接。,则异步打开连接。功能:打开代表基本表、查询结果或者以前保存的功能
31、:打开代表基本表、查询结果或者以前保存的RecordSet中记录的游标(指针)。中记录的游标(指针)。格式:格式:RecordSet.Open,参数:参数:Source可选,变体型,可以是可选,变体型,可以是Command对象对象类型的变量名、类型的变量名、SQL语句、存储过程调用或持久语句、存储过程调用或持久RecordSet文件名。文件名。ActiveConnection可选,变体型,可以是可选,变体型,可以是Connection对象类型的变量名,或包含对象类型的变量名,或包含ConnectionString参数的字符串。参数的字符串。CursorType可选,可选,CursorTypeE
32、num值,确定值,确定提供都打开提供都打开RecordSet应该使用的游标类型。应该使用的游标类型。LockType 可选,确定提供者打开可选,确定提供者打开RecordSet时时应该使用的锁定(并发)类型的应该使用的锁定(并发)类型的LockTypeEnum值。值。Options 可选,长整型值,用于指示提供者如何可选,长整型值,用于指示提供者如何计算计算Source参数,或从以前保存参数,或从以前保存RecordSet的文件的文件中恢复中恢复RecordSet。“数据窗体模板”(DFW,Data Form Wizard)是一个基于ADO的插件,为自动生成VB窗体而设计。它所生成的窗体包含各
33、个被绑定的控件和过程,用来管理来自本地或远程数据源的信息。用户只需选择一个数据库和库中的一个数据表,DFW就可自动地生成对此数据表进行增、删、改和浏览的窗体。如果在如果在VB集成开发环境的集成开发环境的“外接程序外接程序”菜单菜单中已有中已有“数据窗体模板数据窗体模板”,则,则DFW已经加载。否则,已经加载。否则,按如下步骤加载。按如下步骤加载。单击单击“外接程外接程序序”菜单中的菜单中的“外外接程序管理器接程序管理器”命命令,弹出令,弹出“外接程外接程序管理器序管理器”对话框。对话框。选取选取“VB6数据窗体数据窗体向导向导”,在标题为,在标题为“加载行为加载行为”的的框架中选中框架中选中“
34、加载加载/卸载卸载”复选框。复选框。这里这里这里这里单击单击“外接程序外接程序”菜单中的菜单中的“数据窗体模数据窗体模板板”(或或“数据窗体向导数据窗体向导”)命令,弹出)命令,弹出“数据窗体数据窗体向导向导”对话框。对话框。单击此处单击此处第一步第一步直接单击直接单击此处此处第二步第二步选择后单击选择后单击“下一步下一步”第三步第三步选择数据库选择数据库路径和名字路径和名字第四步第四步输入窗体名输入窗体名窗体布局窗体布局绑定类型绑定类型第五步第五步选择记录源选择记录源(表)(表)选择要显示选择要显示的字段的字段第五步第五步已选字段已选字段排序字段排序字段第六步第六步第七步第七步完成完成例例
35、10_20使用使用DFW建立一个窗体,对建立一个窗体,对access数据数据库文件库文件“排课信息排课信息.mdb”中的中的“课程课程”表进行操作。表进行操作。该窗体使用该窗体使用ADO数据控件,显示间个记录。数据控件,显示间个记录。例例 10_21与例1020一样,使用使用DFW建立一个窗建立一个窗体,对体,对access数据库文件数据库文件“排课信息排课信息.mdb”中的中的“课程课程”表进行操作。该窗体不使用表进行操作。该窗体不使用ADO数据控件,数据控件,而用而用ADO代码编程。代码编程。例例 10_22与例1020一样,使用使用DFW建立一个窗建立一个窗体,对体,对access数据库文件数据库文件“排课信息排课信息.mdb”中的中的“课程课程”表进行操作。该窗体不使用表进行操作。该窗体不使用ADO数据控件,数据控件,而用而用ADO代码编程;不是显示单个记录,而是使用代码编程;不是显示单个记录,而是使用网格同时显示多个记录。网格同时显示多个记录。