1、第三章 自由表(Free Table),3.1 表结构的创建和修改,3.2 表数据的输入,3.3 表的打开、关闭、显示和定位,3.4 记录数据的修改和删除,3.5 表的排序、索引和查询,3.6 表的计算、汇总,3.7 多表的关联、连接和更新,3.8 其它有关命令操作,3.9 结构化查询语言SQL,本章学习VFP的自由表文件.DBF 的建立和操作,分为二种方式来学习:菜单方式用鼠标选择菜单项进行数据的管理和使用,即面 向对象的操作方法命令方式在命令窗口输入命令语句进行数据的管理和使用,第三章 自由表(Free Table),(3)逻辑型(Logical)字段(L):存放.真.或.假.两个逻辑值。
2、输入T(t)或Y(y)为真,输入F(f)或N(n)为假。如,姓别:男或女,婚姻:真或假。(4)日期型(Date)字段(D):存贮日期数据。VFP规定输入和显示的默认格式为YYYYMMDD,对应年月日(年取4位)。可用SET DATE等设置命令改变为YY.MM.DD等多种格式。日期型字段可进行日期运算。(5)备注型(Memo)字段(M):用以存贮大量的文字信息,表文件中如果包含有备注字段,则除了该表表文件外,还有一个与表文件同名扩展名“.FPT”的备注型文件,用来存放备每一条记录的注型字段的内容,而备注型字段本身只存放其内容在备注型文件中的地址。因此备注型字段除了能进行编辑、显示和打印外,不能进
3、行其它操作。它是不定长度的长字符串输入,如:报告、文章、简介、说明等。(6)通用型(General)字段(G):它类似一个备注型字段,但主要用来支持Microsoft的对象链接和嵌入OLE(Object linking and embedding)。通用数据型字段的内容也存贮在所分配的.FPT备注文件中,它可以包括任何类型的链接或嵌入的对象。,比如,可以链接或嵌入任何文本、图象、照片、声音、图表、二进制文件或由支持OLE的应用程序所建立的其它对象进入通用数据型字段。(7)日期时间型(Date Time)字段(T):既可以存贮日期,也可以存贮时间或者两者兼有的值。其值是以“yyyymmddhhm
4、mss”字符格式存贮的,即年月日时分秒的形式。可用设置命令设置格式。(8)浮点数值型(Float)字段(F):或叫浮动型字段,与N型字段相同,是数值类型,以ASC码形式表示。主要用于科学运算应用程序(因它要求精确运算)。以IEEE(Institute of Electrical and Electronics Engineers)所描述的二进制浮点表示型式存贮(9)双精度数据型(Double)字段(B):双精度比值型数据(Numeric) 精确。Double数据型是真正的浮点数(双精度的),一般用于科学计算。,(10)整数型 (Integer) 字段(I):使用没有小数值的整数。(11)货币型
5、(Currency)字段(Y):表示货币量的数据而代替用数值型(N)数据表示货币。它的值的范围是2337203685477.5808至22337203685477.5807。值的前面应有美元符号“$” 。如$388.88等。(12)二进制 (binary)字符型字段:存放想维持的、不用通过代码页转变的任何字符数据。它的值的范围是任何字符。(13)二进制(Binary)备注型字段:存放想维持的、不用通过代码页转变的任何备注字段数据。它的范围仅受现存内存限制。,字段宽度字段中能够存放的最大字符数或数字的最大位数 字符型字段不得大于254个字符,否则用备注型字段存贮。 数字型字段(N)的宽度=整数位
6、数+小数位数+1(小数点) 逻辑型字段宽度为1,日期型、日期时间型、货币型、双精度数据型字段宽度为8 备注型、通用型、整数型以及二进制备注型(Binary)字段宽 度为4。浮点数值型字段(F)的宽度=整数位数+小数位数+1(小数点) 二进制字符型(Binary)为1到254个字节。,4小数位:字段的类型是数字型(N)和浮点型(F),就须给出小数位数。,二、建立表结构的命令 格式:CREATE |? 功能:建立一个新的表文件,文件的扩展名是.DBF。 如:CREATE STU.DBF 进入表设计器,可定义表的结构(三个参数)了。见P40。,(1)登录号 字符型(C) 9 (2)登录时间 日期型(
7、D) 8 (3)关键词 字符型(C) 11 (4)行文者号 字符型(C) 10 (5)文档名 字符型(C) 50 (6)行文者名 字符型(C) 0 (7)行文地 字符型(C) 50 (8)登出刊物 字符型(C) 20 (9)行文时间 日期型(D) 8 (10)页数 数字型(N) 3 (11)涉及金额 数字型(N) 11 4 (12)处理情况 字符型(C) 50 (13)摘要 备注型(M) 4,例1:建立文档管理系统的表结构,DF.DBF字段名 类型 宽度 小数位,方法:、在命令窗口键入create DFDBF、用鼠标单击:文件菜单笺(主菜单)新建(弹出的子菜单)表(对话框)新文件。,例2:建立
8、学生成绩档案STU2.DBF。字段有学号,姓名,性别,体育,高数,计算机基础,英语,平均成绩,总分,排名,备注。 用二种方式来建立:(1)窗口用命令建立 (2)用菜单方式建立,实际练习1,三、表结构的修改命令 格式:MODIFY STRUCTURE 功能:显示表文件结构,并允许修改此表的结构。 练习:修改表文件STU2.DBF。MODIFY STRU,实际练习2,建立表结构后,VFP系统会提示:“现在输入数据记录吗?”,如果选择是“Y”,系统则打开一个表窗口,在此窗口中,显示出表文件记录的全部字段,依次输入这些字段的数据,记录就存在了。当完成输入时,用鼠标单击此窗口右上角带的按钮关闭窗口,便可
9、退出完成,该表文件的数据就以记录的形式保存。*备注型字段的数据输入方法,二、追加记录命令 APPEND 命令格式:APPEND BLANK 作用:在当前表的尾部(无论表中有无记录)追加新一条记录(或一条空记录)。,当前表,-正在操作的表。,3.2 表数据的输入一、建立表结构时输入,三、在表中插入记录命令INSERT 格式:INSERT BEFORE BLANK 功能:在表文件中插入一条新录。,四、用BROWSE命令追加数据记录 格式:BROWSE 作用:打开了浏览窗口,可增加、修改、查阅记录。,实际练习3,一、打开和关闭表文件命令,3.3 表的打开、关闭、显示和定位,格式1:USE 功能:打开
10、指定的表文件,该表如有备注型字段,则自动同时打开相应的备注文件。,格式2:USE 功能:关闭当前打开的表文件。,格式3: close all 功能: 关闭所有打开的文件。,二、表的显示和列表 建立表后,用户根据需要经常要对表进行各种查询显示和打印。,1显示表的记录LIST命令 格式:LIST OFF FIELDS WHILE FOR TO PRINT|TO FILE 功能:连续显示表文件的内容。 说明:用户可根据自己的需要确定上面的任选项,组合LIST命令的各种功能、形式。,选项功能:表示不显示记录号,OFF,指定对哪些记录进行操作。 范围包括:RECORD n 第几号记录NEXT n 当前记
11、录开始的几个记录 (n可是一个表达式)REST 自当前记录开始至文件末尾的所有记录。ALL 所有的记录。不选则隐含范围为ALL。,从当前记录开始查找,当出现第一个不满足条件的记录时则停止查找。这种方式一般用于经过排序或索引的表文件。,每个表达式可以是字段名表,也可以是一般的表达式,但之间用“,”分隔。,FIELDS,WHILE,TO PRINT:在打印机上打印出来。 TO FILE:将结果输出到用指定的磁盘文件。,例如1:查看STU1表中所有计算机基础成绩大于或等于80分的学生的信息LIST ALL FOR 计算机基础=80,从内的第一个记录开始, 显示所有条件满足的 记录 ,直到范围内的记录
12、搜索完毕(与WHILE的区别)。注:是逻辑表达式,它只有真和假两个值,条件满足为真(.T.),条件不满足为假(,F.)。,FOR,例如2 :查看STU1表中所有计算机基础成绩为80分及以上学生的学号,计算机基础成绩,体育成绩。,例如3:查看STU2表中所有学生。,例如4:查看STU2表中所有就读方式为统招的男生的学号,姓名。,DISPLAY命令 命令格式:DISPLAY OFFFIELDSWHILEFORTO PRINT|TO FILE,例3:显STU2表的第4条记录的内容。,DISPLAY 与LIST命令功能不同点: (1) VFP的DISPLAY命令每显示一个窗口的信息暂停一次。按任意键继
13、续显示,而LIST显示不暂停。 (2) DISPLAY命令省略范围选择项时,仅显示当前记录,而LIST命令则显示所有记录。,2显示表的结构 格式:LIST STRUCTURE TO PPRINT|TO FILE 菜单方式:显示表设计器(并可修改),3显示表工作状态 格式:LIST STATUS TO PRINT|TO FILE,三、记录的定位 打开表时,指针总是指向第一条记录。但可随着操作指针要移动,或用命令移动指针,改变当前记录。 定位命令是最直接的一种。即用GOTO命令或SKIP命令移动指针。,格式1:GOTO RECORD 定位到记录号为n的记录GOTO TOP 定位到第1条记录GOTO
14、 BOTTOM 定位到最后一条记录,例5: USE stu1 GO BOTTOM DISPLAY,GO TOP DISPLAY,GO 3 disp,格式2:SKIP n 功能:以当前记录为基准前移(-)或后移(+)N条记录。说明:不选任选项,则默认n=+1。,注意:SKIP命令是相对移动,GOTO命令是绝对移动。SKIP命令上移不能超过首记录,下移不能超过末记录。,例4.6:,3.4 记录数据的修改和删除,一、修改表数据 1、 EDIT修改命令 格式:EDIT 功能:显示需修改的记录。,例7,2、浏览修改命令BROWSE 格式:BROWSEFIELDSLOCKFREEZE 功能:BROWSE可
15、打开一个全屏幕编辑窗口, 可浏览、修改、删除、追加记录。,说明: LOCK指定屏幕左边锁定字段的个数,当屏幕左右平移时,这些锁定的字段保持在原来的位置不动,便于用户对照。 FREEZE 使光标冻结在这个字段上,用户只能修改该字段的数据,其它字段只能显示不能修改,提高了数据的安全性和操作效率。,FOR 按指定条件进行判断,当的值为真时,方可显示记录。,例 8: use STU1 browse lock 1 freeze 数学,3、表运算替代命令 格式:REPLACE WITH , WITH ADDITIVEFORWHILE 功能:用表达式的值代替命令中与之相对应的字段的内容,对满足和的记录可成批
16、自动、快速地修改。,例1:use stu1,4、修改通用(General)字段VFP支持微软公司的Windows对象链接和嵌入(OLE),MODIFY GENERAL命令可在任何活动表的当前记录编辑、修改装有OLE对象通用(General)字段。格式:MODIFY GENERAL,菜单操作:直接用鼠标双击通用(General)字段, 打开了指定的通用字段的编辑窗口, 用户可进行修改等操作.,二、删除表记录 1、给记录加删除标记 格式:DELETE WHILEFOR 功能:给要删除的记录作删除标记。 说明:本命令只给记录作删除标记.记录末删除,仍在表中.,命令操作时“*”即为删除标记,用菜单编辑
17、窗口活动时,窗口中记录左边的方块钮,当为黑色时即是加了删除标记, 白色为恢复记录.,例 9,2、恢复加删除标记的记录格式:RECALL FOR WHILE 功能:取消记录的删除标志。,3、彻底删除 格式:PACK 功能:删除当前表中加有删除标记的所有记录。,注:从当前表中删除记录后不可恢复。,4、表记录全部删除命令ZAP 格式:ZAP IN| 功能:将所有的记录从表中删去,只留下表的结构。 说明:执行ZAP命令等于先执行DELETE ALL,然后再执行PACK。,以上的所有操作都可在浏览表后,操作主菜单中“表”进行。,3.5 表的排序、索引和查询,一、表的排序:对表记录进行物理整理,生成一个新
18、表文件。格式:SORT TO ON /A/D/C,/A/C/D FIELDS FOR WHILE 功能:按关键字段的值从小到大(升序/A)或从大到小(降序/D)将表的记录重新排列,生成一个新的表文件(.DBF)。,说明:(1)新表文件的结构与原表结构一样。(2)选项/A是升序,/D是降序。如有/C选是指按字典排列,大小写一样:09,AaZz;如无/C选是指按ASC码顺序排列:09,AZ,az。,物理整理,(3)使用排序表文件时,必先打开。如添加了新记录,必须重新排序,生成一个新表文件。,例1:,二、表的索引:对表记录进行逻辑整理,生成一个索引文件。 1、索引的类型,. IDX文件:只包含一单个
19、索引。 压缩文件,选COMPACT 类型 非压缩文件. CDX文件 (复合索引文件) : 包含多个索引,每个索引叫一个索引标识。 结构复合索引文件,其文件名与表名相同,打 开表时自动打开。独立复合索引文件,逻辑整理,2、索引文件的建立建立.IDX索引文件: 格式1: INDEX ON TO COMPACT ADDITIVE 功能:对当前表中各记录的值的大小,以升序进行记录逻辑上的重新排序,并将逻辑顺序存入TO后指定的索引文件名的索引文件中 。,例2:,建立.CDX索引文件 格式2: INDEX ON TAG OF FOR ,功能:对当前表根据关键字表达式的值以升序进行记录的逻辑排序,并将逻辑顺
20、序存入与表文件名同名或OF所指的复合索引文件的一个标识中。,如在STU2表文件中已建立了下面的索引文件:,说明:(1)备注字段不能作关键字。(2)格式2中无OF,则生成一个结构复合索引文件, TAG 存入与表文件名相同的.CDX索引文件中。如有OF , TAG 则存入所指的独立复合索引文件中。(3) 即索引可按一个或多个字段进行索引,但与排序不一样,需写为表达式。 如: INDEX ON 姓名+学号 TO A2INDEX ON STR(计算机基础)+STR(数学) TO A3(4)ADDITIVE,当建立索引文件时,保留已打开的索引文件仍为打开,使用表设计器(Table Designer)来生
21、成索引 方法:打开表;再选择显示表设计器菜单,单击索引标识卡,出现其对话框;然后在索引名文本框中输入该索引标识的名字,索引名框左边按钮决定升序或降序(对整个索引表达式而言);按拖最左边的箭头钮,可改变索引标识列出的顺序;类型下拉表中可选择索引类型(Primary 主索引、Candidate侯选、Unigue唯一等,表达式框可输入索引表达式(Expression);筛选框可形成筛选条件的索引。注:1、使用表设计器(Table Designer)生成的索引文件为结构复合索引文件(.CDX)。2、打开或新建的索引文件在表设计器中才可见。,操作练习,格式1: USE INDEX 格式2: USE OR
22、DER TAG 例如:USE STU2 INDEX A2USE STU2 INDEX BB ORDER TAG XBUSE STU2 ORDER TAG XBUSE STU2 INDEX STU2 ORDER TAG XH,功能:打开表同时打开索引文件。,3、索引文件和索引标识的使用索引文件必须依赖表文件,操作才有意义。 (1)表与索引文件同时打开的命令,说明:(1)中第一个索引文件是控制(主)索引文件,表中记录指针按第一个索引文件定位。(2) ORDER TAG是改变控制索引文件或标识。,(2)单独打开索引文件 格式1:SET INDEX TO 文件名|TAG|OF,例如: SET INDE
23、X TO A1,A2 & A1 是主索引文件 SET INDEX TO BB SET INDEX TO BB TAG XB OF BB SET INDEX TO STU2 TAG XB SET INDEX TO BB TAG XB,XH,常用:SET INDEX TO SET INDEX TO TAG,常用:,可以用下列命令改变主索引,而不需重新选择索引顺序。 格式2:SET ORDER TO |TAGOFIN ASCENDING|DESCENDING,例如: SET ORDER TO A2 (或SET ORDER TO 2) & A2 是主索引文件 SET ORDER TO TAG XB O
24、F BB SET ORDER TO TAG XB,SET ORDER TO SET ORDER TO TAG OF,常用:,四、表的查寻 1、检索命令 FIND格式:FIND |功能:在一个已经建立了索引文件的表中,定位到关键字中的内容与命令行中字符串相同的第一个记录。,说明:查询的的字段须在建立索引文件时包含的关键字(字段)中。,2、检索命令 SEEK格式:SEEK 说明:SEEK命令比FIND命令功能更强,可以是一个表达式,且可是C、N、D型。,查寻命令LOCATE格式:LOCATE FOR WHILE 功能:把当前表指针定位到符合指定条件的第一个记录上。说明:选择项为指定查找记录的范围。
25、,继续查寻命令CONTINUE格式:CONTINUE,3、一般查寻命令LOCATE和CONTINUE,例如:use stu-1locate all for 数学=80disp 姓名,数学continue 循环 disp 姓名,数学continuedisp 姓名,数学.,3.6 表的计算、汇总VFP不但能对表的排序、索引、查寻、修改等操作进行管理,而且还能统计、汇总表以及用报表文件将结果存贮和打印出来。,一、表的计算命令,1、计数命令 格式:COUNTFORWHILETO 功能:统计当前表文件中符合条件的记录数。,例3.32 (P74) :在Ffile表文件(见P63表3-4)中,统计出工资大于
26、12000的讲师的记录数,存M1中。USE FfileCOUNT FOR 职称=“讲师“.AND.工资12000.00 TO M1? “M1=”,M1M1=2,格式:SUM 数值TO |TO ARRAY FOR WHILENOOPTIMIZE 功能:对当前表中选中记录的全部或指定的数值字段或由指定字段组成的数值表达式累加求和。,2、求和命令,P74例4.33:求Ffile表文件中讲师的平均工资和平均年龄。USE FfileSUM ALL 工资,年龄 TO G1,G2 FOR 职称=“讲师“?“工资总和 =”,G1工资总和 = 45222.00?“ 年龄总和=”, G2年龄总和= 84 COUN
27、T ALL FOR 职称=“讲师“ TO N? “平均工资=”,G1/N, “平均年龄=”,G2/N平均工资= 22611.00 平均年龄= 42,3、求平均值命令AVERAGE格式:AVERAGETO |TO ARRAY FORWHILENOOPTIMIZE功能:对当前表中选中记录的全部或部分数值型字段及其组成的表达式求平均值并显示,且可存入内存变量名表或一维数组中。,例4.34:求Ffile表中讲师的平均工资和平均年龄(题目与上例相同).USE FfileAVERAGE ALL 工资,年龄 TO N1,N2 FOR 职称=“讲师“? “平均工资=”,N1, “平均年龄=”,N2平均工资=
28、22611.00 平均年龄= 42,二、表的汇总命令,格式:TOTAL TO ON FIELDS FOR WHILENOOPTIMIZE,功能:对当前表中选中记录的全部或部分数值型字段按关键字值相同的记录进行汇总,并将其结果放入指定的表文件中。,说明:1.使用TOTAL命令前必须对当前表按进行过排序或者索引。2.生成的汇总文件的结构与表文件结构相同,数据部分只包含当前表文件与汇总文件相匹配的那些字段的值,且对其中关键字值相同的记录的数值型字段求和。,例3.35:对宾馆收银表SY,按楼层对其数值字段进行汇总。USE SYINDEX ON 楼层 TO SYISET INDEX TO SYILIST
29、 Record# 楼层 房号 姓名 其它应收 房费 实际金额1 二楼 2010 刘炎 48.00 250.00 298.002 二楼 2020 周敏 50.00 300.00 350.003 二楼 2030 郭洁 45.00 500.00 545.004 三楼 3001 郭丹丹 80.00 650.00 730.005 三楼 3008 于驰 50.00 450.00 500.006 三楼 3007 罗贵先 45.00 500.00 545.00,在实际运用中,用户常常需要将表的数值字段进行分类统计,比如宾馆的收银表管理中需要按楼层对房费、其它应收费和实际金额等字段进行汇总,且将汇总结果放到另一
30、个表(汇总表)中去,以便打印报表。,TOTAL ON 楼层 TO NSUMUSE NSUMLIST Record# 楼层 房号 姓名 其它应收 房费 实际金额1 二楼 2010 刘炎 143 1050.00 1193.002 三楼 3001 郭丹丹175 1600.00 1775.00,1、 多对多关系、多对一关系及其它关系 (1)多对多关系例如学校开设选修课,每一个学生可以选修几门课程,而每门课程又可以被多个学生选学,教务处在管理这些数据时建立一个表JW.DBF,其表结构和部分记录如P77:,从表中可知存在“多对多”的关系,有大量的数据冗余。需要将上表分离成两个“多对一”关系的数据表。一个表
31、为多门课程对一个学生,另一个表为多个学生对一门课程。,(2)多对一关系(或一对多关系) 第一个“一”表为学生表STUDENT,第二个“一”表为课程表LESSON,“多”表为联系表LINK。对上三个表需要找出使它们有相互联系的字段(称为关键字段),STUDENT表确定为学号字段,LESSON表确定为课程号字段。而LINK表确定为学号字段与STUDENT表联系、确定为课程号字段与LESSON表联系。,3.7 多表的关联、连接和更新,在VFP中一般可以同时打开255个表(实际上是受内存限制,内存大还可更多),为使它们之间互不干扰,系统允许开辟32767个工作区。(1) 常用的前10个工作区:工作区号
32、为1至10,工作区名用A至J表示,(工作区1132767 中指定的别名是w11到w32767)。,(2) 一个工作区只能打开一个表。同一个表也只能在一个工作区中打开。(3)选择工作区命令格式:SELECT 作用:激活工作区,2、不同工作区中表的操作,如: select ause stu1select buse stu2select 1 listuse,(4)是在打开表文件时由ALIAS任选项指定的名字,: 格式:USE ALIAS 如果未用ALIAS任选项,则表文件就是它的别名,也可以用工作区名作为已在该工作区中打开的表文件的别名。接上例:,说明:当VFP等启动时,系统默认的工作区是1号工作区
33、,所以到目前为止表操作均在1号工作区中进行。用户可以使用子句中的数值指定工作区号。,(5)使用非当前工作区中的表格式: .或功能:显示指定 非当前工作区 中打开的表的的内容。说明:在不同工作区中打开的表都有其相应的记录指针,当前表记录指针的移动不会影响其它工作区中表记录指针的变化,sele 3 use stu1 alias s1 sele stu2 List sele s1 List close all,例3.36:有两个“一对一”的表:学生成绩表STU1和学生档案表STU2。SELE 1USE STU1SELE 3USE STU2SELE 1LIST NEXT 3 姓名,C性别,C出生日期,
34、C就读方式Record# 姓名 C-性别 C出生日期 C就读方式1 李蓉 女 78/05/20 统招2 张天明 女 78/05/20 统招3 王晓云 女 78/05/20 统招从显示结果看出,非当前工作区(区)的记录指针未随主工作区指针的移动而移动,故发生了张冠李戴的情况。,要解决这个问题就必须要在两个表之间建立关联,即两个表建立了指针的逻辑关系。在实际的表系统中常常要管理多个表,所以在对多重表的操作中使用关联、连接、更新,设置和存贮表之间的临时关系是十分重要的。,一、关联 格式:SET RELATION TO | INTO ,TO | INTO ADDITIVE功能:把当前工作区(主工作区)
35、中的表文件与别名所指定的辅工作区中的表文件通过表达式建立关联。,说明: (1)命令中的关键字表达式其值必须是两个表文件共同有的字段,它是两个表文件建立关系的条件。(2)命令中若使用关键字表达式,则别名表文件必须在该关键字表达式上建索引文件并打开。(3)命令中若用数值表达式,则两个表文件是按照记录号相关联的。(4)如果别名表文件中没有找到匹配的记录,指针将定位在文件尾,EOF()=.T.;(5)VEP允许主工作区同时和多个辅工作区建立关联,即A可以关联B,A又可以关联C,等等;(6)格式中如有ADDITIVE任选项,表示本命令建立关联时仍然保留该区与其它工作区已经建立的关联。(7)命令若缺省任选
36、项(SET RELATION TO ),则将中断关联。,例题1: SELE 1 USE STU1 INDEX ON 学号 TO XH1 SET INDEX TO XH1 SELE 3 USE STU2 INDEX ON 学号 TO XH SET INDEX TO XH SELE 1 SET RELATION TO 学号 INTO C LIST NEXT 3 姓名,C性别,C出生日期,C就读方式Record# 姓名 C性别 C出生日期 C就读方式1 李蓉 女 78/05/20 统招2 张天明 男 77/09/07 统招3 王晓云 男 78/11/11 统招,例题2: SELE 1 USE STU
37、1 SELE 2 USE STU2 SELE 1 SET RELATION TO RECNO() INTO B LIST NEXT 3 姓名,C性别,C出生日期,C就读方式Record# 姓名 C性别 C出生日期 C就读方式1 李蓉 女 78/05/20 统招2 张天明 男 77/09/07 统招3 王晓云 男 78/11/11 统招思考题:如以平均成绩作为关键字建关联,将可能会出现什么情况?,例3:学生选修课程的情况。,演示程序3-1,用VFP的数据工作区窗口实现上述操作 单击窗口数据工作期菜单。 1工作区的选择在数据工作期窗口中单击可选择工作区,用打开(Open)对话框打开一个表。 2设置
38、表的关联数据工作期窗口提供了两个表间建立关联的操作,但要求要建立关系的两个表必须具有“多对一”关系,且“多”表所在的工作区必须置为当前工作区,设置关联的“一”表在非当前工作区,“一”表必须对关键字进行索引。 如下图,二、生成.VUE视图文件 在使用“数据工作期”窗口时,选择“文件”菜单中的“另存为”,将其窗口存储为视图文件,三、不同工作区中表的连接不同工作区的两个表以字段为单位的纵向连接。 格式:JOIN WITH TO FIELDS FOR 功能:主工作区的表和所指的辅工作区的表,按要求的条件、指定的字段进行连接,建立一个新的表文件,扩展名为.DBF。 注意:格式中的FOR是必须的。,例3.
39、42: 将STU1与STU2连接成新表文件STU4。 SELE 1 USE STU1 SELE 2 USE STU2 JOIN WITH A TO STU4 FIELDS 学号,A姓名,性别,A计算机 基础 FOR 学号=A号,USE STU4 LIST Recorde# 学号 A姓名 性别 A计算机基础1 962101 李蓉 女 90.002 962102 张天明 男 87.003 962103 王晓云 男 80.004 962104 王小菲 女 94.005 962105 孙力 男 76.00,四、更新用REPLAC命令可以更新一个表中的数据,但操作不太方便。本节将介绍用非当前工作区表的内
40、容去替换或修改当前工作区中表的内容。格式:UPDATE ON FROM REPLACE WITH , WITH RANDOM功能:用所指定的表(源表)的数据更新当前工作区表的数据(目标表)。,注意:UPDATE的执行过程:当前表的第一条记录按照 对表中的每一条记录进行比较,若相等则用的值更新目标表中的数据。若有多条记录与之相等,只对第一条相等的记录发生作用。然后主区数据表的记录指针向下移一条记录,重复上述操作,直到主工作区表全部记录都被处理完毕。,例题5:用STU1表中的平均成绩来更新STU2表的平均分。SELE 1USE STU1SELE 2USE STU2INDEX ON 学号 TO XH
41、SET INDEX TO XHUPDATE ON 学号 FROM A REPLACE 平均分 WITH A平均分LIST,演示程序3-2,3.8 其它有关命令操作,二、复制表文件 1、表文件的复制 格式1:COPY TO FIELDSWHILEFOR 功能:将当前表文件内容全部或部分地复制到新文件中。说明:(1)对已打开的表文件进行复制。(2)中可 包括备注型字段。,一、关闭命令格式:CLOSE ALL 功能:关闭所有工作区中的表文件,同时关闭所有索引文件和屏幕格式文件,并使1号工作区成为当前工作区。,格式2:COPY FILE TO 功能:对文件进行整体复制。 说明: (1)对未打开的表文件
42、进行整体复制,文件可以是各类型文件。 (2)若源文件有备注文件时必须再使用copy命令复制与该表文件相应的备注型文件。,Use stu1 Copy to stu3 Use stu3 list,2、表结构的复制 格式:COPY STRUCTURE TO FIELDS 功能:将当前表结构的全部或部分复制到指定中去Use stu1 Copy structure to stu4 fislas 姓名,学号计,算机基础 Use stu4 list,三、数据结合文件,格式:APPEND FROM FIELDSWHILEFOR功能:将文件名指定的表文件内容追加到当前表的未尾。例:,3.9,结构化查询语言SQL
43、,3.9.1 SQL语言概述 3. 9.2 数据查询 3. 9.3 数据定义 3. 9.4 数据操纵,3. 9.1 SQL语言概述SQL是结构化查询语言(Structured Query Language)的缩写。SQL语言来源于20世纪70年代IBM的一个被称为SEQUEL的研究项目。20世纪80年代,SQL由ANSI (美国国家标准协会)进行了标准化,被确定为关系型数据库管理系统的标准语言。目前流行的关系数据库管理系统,如Oracle、Sybase、SQL Server、Visual FoxPro等都采用了SQL语言标准。并且很多数据库系统都对SQL语句进行了再开发和扩展,从而使未来的数据
44、库环境连接为一个统一的整体。 SQL语言提供了访问关系型数据库的标准方法 。SQL语言也可在过程化语言编写的数据库应用程序中使用(被称为嵌入式SQL)。,SQL语言具有如下特点: (1)一体化语言。SQL提供了一系列完整的数据定义、数据查询、数据操纵、数据控制等方面的功能。用SQL可以实现数据库生命周期中的全部活动,包括数据库和表结构的定义、修改,实现表中数据的增加、修改、删除、查询和维护,数据库重构、数据库安全控制等一系列操作要求。 注:由于Visual FoxPro自身在安全控制方面的缺陷,所以它没有提供数据控制功能。,表 31 SQL的基本功能和命令,(2)高度非过程化。SQL和其他数据
45、操作语言不同,SQL是一种非过程性语言,它不必一步步地告诉计算机“如何”去做,用户只需说明做什么操作,而不用说明怎样做,不必了解数据存储的格式及SQL命令的内部,就可方便地对关系数据库进行操作。,(3)语言简洁。虽然SQL的功能很强大,但语法却很简单,只有为数不多的几条命令。初学者经过短期的学习就可以使用SQL进行数据库的存取等操作,因此,易学易用是它的最大特点。,表 31 SQL的基本功能和命令,(4)统一的语法结构对待不同的工作方式。 SQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。现在很多数据库应用开发工具都将SQL语言直接融入到自身的语言之中,使用起来更
46、方便,Visual FoxPro就是如此。这些使用方式为用户提供了灵活的选择余地。,注:在书写的时候,如果命令太长,可以用“;”号换行。 VFP中SQL命令的使用方式(与其它 VFP命令相同)。即:可以在VFP的命令窗口、程序(.PRG)或表单(.SCX)的事件程序中使用。,SQL虽然在各种数据库产品中得到了广泛的支持,但迄今为止,它只是一种建议标准,各种数据库产品中所实现的SQL在语法、功能等方面均略有差异。SQL方言 :不同的数据库管理系统厂商既遵循了标准SQL语言规定的基本操作,又在标准SQL语言的基础上进行了扩展和增强。本章讲述Visual FoxPro 中SQL的语法、功能与应用。,
47、3. 9.2 数据查询数据查询是数据库中最常见的操作,数据查询也是SQL的核心。通过使用 SELECT-SQL语句,可以完全控制查询结果以及结果的存放位置。SELECT-SQL语句是SQL语言中最重要、使用最频繁的一条语句,也是最复杂的一条语句。,使用SQL语句进行查询时不需要在不同的工作区打开不同的表,只需将要连接的表、查询所需的字段、筛选记录的条件、记录分组的依据、排序的方式以及查询结果的显示方式,写在一条SELECT语句中,就可以对数据库进行查询并返回符合用户查询标准的结果数据 。Visual FoxPro可以自动分辨所使用的究竟是SQL中的SELECT命令或是切换工作区的SELECT命令。,【命令格式】 SELECT ALL|DISTINCT .AS ,.AS FROM AS INNER | LEFT OUTER | RIGHTOUTER|FULL OUTER JOIN !ASON INTO |TO FILEADDITIVE |TO PRINTER PROMPT|TO SCREEN PREFERENCE NOCONSOLEPLAINNOWAIT WHERE AND AND|OR AND|OR ORDER BY ASC|DESC,ASC|DESC GROUP BY , HAVING UNIONALLSELECT命令,