1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,3.1,建立表,在,VFP,中的,表也叫数据表,其扩展名为,.dbf,它是收集和存储信息的基本单元,.,它可以分为,自由表和数据库表,.,自由表和数据库表在形式上是完全相同,只是自由表是完全独立的文件,而数据表是包含于数据库中的,一个数据库可以包含一个或多个数据库表,.,自由表和数据库表还可以,互相转换,3.1.1,定义表的结构,单个数据表在形式上就是一个二维表,如学生情况表。,在,VFP,中,一张二维表对应一个数据表。称为表文件(,Table,)。二维表中的每一列称为一个字段(,Field,),除标题行外
2、的每一个行称为一条记录(,Record,)。,定义数据表的结构,就是根据二维表的定义来确定,数据表的结构。即确定数据表的组织形式,也即定义数据表的字段个数、字段名、字段类型、字段宽度、小数位数以及是否以该字段建立索引等。,1.,字段名,字段名用来标识表中的字段,由用户自行指定,是一个以字母或汉字开头且长度不能超过,10,个字符,的字母、汉字、数字、下划线序列。其中一个汉字相当于两个字符。,2.,字段类型,字段类型用于指定字段所存放的数据的类型。,VFP,的字段类型包括字符型、数值型、日期型、逻辑型、备注型、通用型等,且均可用一个相应的字符代码表示,其作用也各不相同。如表,4-2,所示。,3,字
3、段宽度,字段宽度用于指定字段所能,存储数据的最大字节数,。对于字符型、数值型、浮点型字段,用户应根据所要存储数据的实际情况设定合适的宽度。而其他类型的字段、其宽度则由,VFP,规定,用户是无法对其进行更改的。,在建立表结构时,应根据要存储数据的实际需要设定合适的宽度。如果包含有备注型或通用型的字段,那么,VFP,在创建扩展名为,.dbf,的表文件的同时,还会自动地创建扩展名为,.fpt,的同名的备注文件。,4,小数位数,对于,N,型和,F,型的字段,还有定义小数位数。小数位数指小数点右边有几位数字。,字段宽度包括整数位数、小数位数、正负号和小数点,,如数值,-12345.67,,其宽度至少设置
4、9,位。对于整数,小数位数设为,0,;对于纯小数,小数位数至少比字段宽度少,1,位。,5,使用空值(,NULL,),在创建数据表结构时,是否选定字段为,NULL,值,,这决定该字段中的数据是否接受空值。空值不同于,0,、空字符串或者空白。,而是一个不确定的值,。若设定某字段可以接受空值,则此字段允许值明确之后再写入数据。系统默认为不能接受空值。,4.1.2,创建表,创建数据表的方法有以下几种:,1,用,表设计器,建立数据表,【,例,4.1,】,创建一个名为“学生情况表”的自由表,表结构如表,4-3,所示。,操作步骤:,(,1,)在,VFP,系统主菜单下,选择“文件”“新建”命令或单击工具栏中
5、的“”新建按钮,打开“创建”对话框,如图,4-1,所示。,(,2,)在“新建”窗口,选择“表”,在按“新建文件”按钮,进入“创建”对话框,如图,4-2,所示。,(,3,)在“创建”对话框“输入表名”文本框中输入表名“学生情况表”(可以不写扩展名,.dbf,,系统会自动加上),然后按“保存”按钮,进入“表设计器”窗口,如图,4-3,所示。,4),在“字段”标签的字段名、类型、宽度、小数位数和是否建立索引等列分别输入表结构的内容。根据表,4-3,的内容,逐行输入以下信息,结果如图,4-4,所示。,(,5,)当表中所有字段的属性定义完成后,单击“确定”按钮即出现如图,4-5,所示的对话框,询问“现在
6、输入数据记录吗?”。“是”按钮,可以立即开始输入数据记录;单击“否”按钮,则表示不输入记录,生成一个只有表头(结构)没有记录的空表。,表的基本操作命令,表结构相关命令,1,、,表的创建,(,1,),Create,(,2,),Create table,表名,(,字段名,1,数据类型(宽度),.,字段名,N,数据类型(宽度),),例:,create table,学生(学号,C,(,9,),姓名,C(8),,,性别,C,(,2,),出生日期,D,),工资表,gzb,结构,字段名,类型,宽度,小数位数,编号,字符型,4,基本工资,数值型,8,2,岗位津贴,数值型,7,2,奖励,数值型,7,2,应发工资
7、数值型,8,2,水电,数值型,7,2,保险,数值型,7,2,实发工资,数值型,2,2,在命令窗口输入如下命令:,CREATE TABLE gzb(,编号,C(4),,基本工资,N(8,2),,,;,岗位津贴,N(7,2),,奖励,N(7,2),,;,应发工资,N(8,2),,水电,N(7,2),,保险,N(7,2),,实,;,发工资,N(8,2),上述命令第一行末尾的,“,;,”,号为,续行标志,,一般用在命令文件中,一条命令书写不下时,用,“,;,”,号作续行标志,再在下一行继续输入。注意,用,CREATE TABLE,命令建立一个表后,该,表自动处于打开状态,。,2,、打开表,USE E
8、XCLUSIVE,SHARED,3,、关闭表,Use,在当前工作区关闭表可以使用以下命令。,(,1,),格式,:,CLOSE ALL,功能:关闭所有打开的表,同时释放所有的内存变量。,(,2,),格式,:,CLOSE TABLES,功能:关闭当前数据库中所有打开的表。,(,3,),格式,:,CLOSE TABLES ALL,功能:关闭所有数据库中所有打开的表及自由表。,(4),quit,4,、修改表结构命令,Modify structure,功能:显示并修改当前数据表的结构。,说明:使用此命令之前,一定要打开被修改的数据表。,使用此命令时,系统会自动生成一个与原数据表文件主名相同,且扩展名为,
9、bak,的备份文件,如果原数据表文件有备注字段,其备注文件产生的备份文件的主文件名不变,扩展名为,.tbk,。备份文件保存的是原数据表文件的全部信息。如果被修改的数据表文件出现问题,可以通过备份文件恢复原来的数据表文件。,具体方法是:把,.bak,文件改为,.dbf,文件,,.tbk,文件改为,.fpt,文件,5,、显示表结构命令,List/display structure,例:显示“学生”表结构,Use,学生,Display structure,6,、复制表结构,(1),COPY STRUCTURE TO FIELDS ,功能,:,复制当前打开的表结构到新的表文件中,但不复制任何数据记录
10、例,:,复制,“,学生,”,表的结构,生成,“,学生,_CS.DBF,”,文件。,COPY STRUCTURE TO,学生,_cs,(,2,),Copy to fields for,功能,:,将打开表的全部或部分结构及数据复制到新表。,例,:,复制,“,学生,”,表中,学号,、,姓名,、,性别,、,出生日期,四个字段到新表,“,学生,_1.DBF,”,中。,COPY TO,学生,_1 FIELDS,学号,姓名,性别,出生日期,表记录相关命令,1,、浏览表记录,Browse,Browse last,list/display fields for,功能:显示当前表中满足指定范围和条件的数据记录
11、说明:,当省略了,和,选项时,,LIST,命令显示表中所有记录,,DISPLAY,命令只显示当前一条记录。,2,、追加记录,(1)Append blank,在表的末尾追加新记录。,(2)Insert blank before,可在数据表的中间插入新记录。,(3)Append from for fields,功能:将,中满足条件的记录按指定的字段追加到当前数据表的尾部。,说明:,(,1,)缺省所有选项,则表示将,的记录追加到当前数据表的尾部。只增加与当前数据表文件字段名和类型相同的字段。,(,2,),FIELDS,选项:指定追加到当前表文件中的字段数据。,(,3,),FOR,选项:指定满足条
12、件的记录追加到当前表文件中。,3,、,删除记录,逻辑删除记录:,delete for,条件表达式,不用,for,语句则删除当前一条记录。,Delete for,年龄,20,4,、恢复记录,Recall for,条件表达式,Recall for,性别,女,5,、物理删除,Pack,(,删除当前表中带删除标记的记录),Zap,(,删除表中所有记录,保留表结构),6,、修改记录,交互式修改:,格式,1,:,edit/change fields for,功能:打开编辑方式窗口,显示并修改数据表中满足指定范围和条件的记录。,说明:,(,1,)如果不指定任何选项,从当前记录开始显示所有字段的数据。,(,2
13、FIELDS,选项:指定在窗口中显示的字段,供编辑修改。如不指定此项,则显示全部字段。,格式,2,:,BROWSE FIELDS FOR,功能:打开浏览方式窗口,显示并编辑修改数据表中满足指定条件的记录。,成批修改记录数据,replace with additive,,,with additivefor,功能:将当前表中指定记录的有关字段用相应的表达式值替换。,说明:,(,1,),additive,用于备注型字段,表示将表达式的值添加到字段的原有内容后,而不是取代。,(,2,)若范围和条件两项都缺省,只对当前记录的有关字段进行替换。,(,3,)字段变量不能直接赋值,如姓名,=,“,肖燕燕
14、7,、数据记录定位命令,1),绝对定位命令,格式,:,GO,GOTO TOP,BOTTOM,功能:将记录指针移到记录指定记录上。,说明:,(,1,),GO TOP,,将记录指针移动到第一条记录上。,(,2,),GO BOTTOM,,将记录指针移动到最后一条记录上,(,3,),GO,,将记录指针移动到表达式所指记录号的记录上,2),相对定位命令,格式:,SKIP,功能:将当前表中记录指针相对移动若干个记录。,3),按条件定位命令,格式:,locate for,功能:将记录指针定位到指定范围内且满足条件的第一条记录上。,说明:若缺省,,则为,ALL,。,LOCATE,命令一般与,contin
15、ue,命令配对使用。,LOCATE,命令定位满足条件的第一条记录,,continue,使指针指向下一条满足条件的命令。,表的特殊类型数据输入,(,1,),对备注型字段的输入,当光标位于该字段时,双击鼠标左键,进入编辑器,输入完字符型数据后关闭编辑器,此时,memo,变为,Memo,(表示该字段非空)。,(,2,)对通用型字段的输入,当光标位于该字段时,双击鼠标左键进入编辑器,此时可选定,“,编辑,”,菜单的,“,插入对象,”,命令,插入图形、电子表格或声音等多媒体数据文件,然后关闭编辑器,此时,gen,变为,Gen,(表示该字段非空)。,(,3,)记录数据输入结束时,按,【Ctrl+W】,保存
16、退出,若放弃已经输入的数据按,【Ctrl+Q】,。,4.2.4,统计操作,VFP,提供了对数据表中的记录进行统计的功能。统计主要包括:计数、求和、求平均值以及分类汇总计算等。统计操作多适用于表中的数值型字段。,1,计数命令,格式:,COUNT FOR TO,功能:统计当前数据表中指定范围内满足条件的记录个数。,说明:如果缺省范围和条件选项,则统计表中的记录的总数。,“,TO,”,选项是将统计结果存于内存变量中,【,例,】,统计“学生情况表”中女生人数。,2,求和命令,格式:,SUM FOR TO/ARRAY,功能:对当前数据表中的数值字段纵向求和。,说明:,(,1,)缺省,“,范围,”,和,“
17、FOR/WHILE,”,,则对所有记录求和。,(,2,)若指定,,则只对,中的各表达式分别累加求和。缺省时,则对当前表中所有数值字段求和。,(,3,)若使用,TO,选项,则将求和结果依次存于相应的内存变量中,但内存变量的个数必须与表达式或数值字段的个数相同,否则将出错。缺省时,内存变量个数应等于数据表中数值型字段的个数。,(,4,)若使用,ARRAY,选项,可将求出的各个表达式的值依次赋值给数组中的各个数组元素。,【,例,】,对“教师工资表”中的“工资”和“实发数”字段求和。,操作:在命令窗口中输入命令序列,如图所示的命令窗口内容,主窗口显示“工资”和“实发数”的总和。,3,求平均值命令,格
18、式:,AVERAGE FOR TO,功能:对当前数据表中的数值字段求平均值。,说明:各选项的意义与,SUM,命令相同。,【,例,】,对,“,教师工资表,”,中的,“,工资,”,和,“,实发数,”,字段求平均值。,操作:在命令窗口中输入命令序列,如图所示的命令窗口内容,主窗口显示,“,工资,”,和,“,实发数,”,的平均值,4,计算命令,格式:,CALCULATE FOR TO/ARRAY,功能:分别统计当前表中表达式表的值。,说明:表达式表可以是下列函数任意组合:,(,1,),CNT(),为统计记录个数。,(,2,),AVG(),为求平均值。,(,3,),MAX(),为求最大值。,(,4,),
19、MIN(),为求最小值。,(,5,),SUM(),为求和。,(,6,),VAR(),为求均方差。,(,7,),STD(),为求标准差,。,【,例,】,在“教师工资表”中,求最多、最少和平均的工资“实发数”。,操作:在命令窗口中输入命令序列,如图所示的命令窗口内容,主窗口显示结果,5,分类汇总命令,分类汇总就是对表中同一类数据进行统计汇总,也称分组求和。,格式:,TOTAL ON TO FIELDS FOR,功能:在当前数据表指定范围内和满足条件的记录中,分别对,相同的记录的数值型字段累加求和,并将结果作为新的数据表文件中的相应字段之值。,说明:,(,1,)当前数据表必须按,先排序或建立了索引的
20、数据表,否则不能汇总。,(,2,)缺省范围选项,则指表所有的记录。,(,3,)命令所产生的新数据表文件的结构与当前数据表文件的结构相同,但不包括备注型字段。当前表中,值相同的一类记录,在新表中只有一条记录,其数值字段的值是同类记录的数值字段值之和,非数值型字段是同类记录中的第一条记录相应的字段值。,(,4,),FIELDS,选项是指定要汇总的数值型字段。若缺省,则对表中的所有数值型字段汇总。,【,例,】,按部门对,“,教师工资表,”,进行汇总统计应扣数和实发数,结果存于,“,部门工资表,.dbf,”,中。,操作:在命令窗口中输入命令序列,如图,4-62,所示的命令窗口内容,主窗口中显示结果。,
21、部门汇总,”,数据表中有,4,条记录,其中,“,应扣数,”,和,“,实发数,”,为相同部门的,“,应扣数,”,总和和,“,实发数,”,总和。,索引与排序,索引,_,是按照索引表达式的值使数据表中的记录有序地进行逻辑排列的技术,索引实际上也是一种排序,但是它不改变表中记录的物理顺序,也不另外建立存储表的记录,而是建立一个记录号列表。在这个只有记录号的列表中,其记录号是按照索引关键字的值有序排列的。,用于进行索引的关键字称为,索引关键字,。表一旦按索引关键字建立索引后,就产生了一个相应的,索引文件,。索引文件只包括索引关键字和记录号两个字段,用以存储索引关键字和索引后的记录列表。,在,VFP,
22、系统中,同一个数据库中的多个表以同名字段建立索引后,可根据索引关键字的值建立数据库中多个表间的关联关系。,2,、索引类型,索引文件名和原表文件名同名,索引文件分为单索引和复合索引。,单索引文件是包含一个索引的文件,其索引文件的扩展名为,.IDX,。,复合索引是在一个索引文件中可以包含多个索引,文件的扩展名为,.CDX,。,在,VFP,中主要使用复合索引,这种索引文件总是以压缩形式存储,以便减少占用存储空间。,VFP,系统的复合索引文件中可包括,4,种不同的索引类型:,主索引、候选索引、普通索引和惟一索引。,1,)主索引,只有数据库中的表可以建立主索引(,Primary Index,)。其索引关
23、键字的值是惟一的;否则不可建立主索引。一个表中只能有,一个,主索引。,主索引主要用于建立永久关系的主表中,可为表的引用建立参照完整性。,2,)候选索引,候选索引(,Candidate Index,)像主索引一样,它的索引关键字的值也是能够惟一标识每个记录处理顺序的值,即,索引关键值无重复值,。,一个表可以建立,多个,候选索引,它在特定环境下可以视为主索引。如果一个表中已有主索引,则只能建立候选索引。,3,普通索引,普通索引(,Regular Index,)表示把每个记录的索引关键字值存入索引文件中。如果多个记录的索引关键字值相同,则可以重复存储,并用独立的指针指向各条记录。,普通索引不同的索引
24、关键字值按顺序排列,对有相同索引关键字值的记录按原先的先后顺序集中排列在一起。,4,惟一索引,惟一索引(,Unique Index,)对于关键字相同的记录,只将,第一个,满足该值的记录包含在索引文件中,可以避免显示或访问记录的重复值。对于添加到表中的记录,如果与表中原有记录的索引关键字值相同,则不包含在索引文件之内。,3,、创建索引,在,VFP,中,索引文件可使用表设计器或索引命令建立。,1,利用表设计器创建索引,使用表设计器创建索引文件,可以在创建表的同时创建索引文件,也可对已有的表创建索引文件。,【,例,4.30,】,为,“,学生成绩表,”,建立一个复合索引文件,其中包括两个索引名:以学号
25、为升序的主索引名;以总分相等时高等数学降序排列的索引名。,操作步骤:,(,1,)选择“文件”,“打开”命令,打开“学生成绩表”。,(,2,)选择,“,显示,”,“,表设计器,”,命令,进入,“,表设计器,”,对话框。如图,4-63,所示,(,4,)在“索引名”框中输入新的索引名,如“成绩”,也可直接修改索引名。选择索引类型为“普通索引”。,(,5,)“表达式”是索引的依据,称为索引关键字表达式。用户可直接输入表达式,也可单击右侧的按钮,弹出“表达式生成器”,如图,4-65,所示,输入如下索引关键字:,STR,(总分,4,),+STR,(高等数学,3,),(,6,)在“筛选”列文本框中可直接输入
26、筛选条件或单击右侧的按钮,同样弹出“表达式生成器”,可输入筛选条件,如“总分,=400”,,输出时只输出总分在,400,分以上的记录。,(,7,)单击“确定”按钮,弹出消息提示框,如图,4-66,所示。选择“是”,完成建立索引操作。,(,1,)当索引涉及到多个字段的值时,就要将它们组成一个索引关键字表达式,索引是按每个记录索引关键字的值进行排列。这个表达式一般是字符型表达式,需将其他类型的数据转换成字符类型。,(,2,)不能对备注或通用字段进行索引。,2,利用命令创建索引,格式:,INDEX ON TO/TAG,OF FOR COMPACT,ASCENDING/DESCENDING UNIQU
27、E/CANDIDATE ADDITIVE,功能:按索引表达式的值创建指定的索引文件。,说明:,(,1,),TO,建立一个单索引文件。,(,2,),TAG,建立一个复合索引文件。如果复合索引文件已经建立,则将该索引名添加到复合索引文件中。,(,3,),OF,建立非结构的复合索引文件,省略时建立结构复合索引文件。,(,4,),FOR,指定筛选条件,只显示或访问满足条件的记录。,(,5,),COMPACT,创建一个压缩的,.IDX,文件,复合索引可以省略。,(,6,),ASCENDING/DESCENDING,表示升序或降序索引,系统默认为升序。,(,7,),UNIQUE/CANDIDATE,表示建
28、立惟一索引或候选索引。,(,8,),ADDITIVE,表示现在建立索引时是否关闭以前的索引,默认是关闭已经使用的索引,使新建的索引成为当前索引。,【,例,4.31,】,使用命令方式为,“,学生成绩表,”,中的,“,总分,”,字段建立候选索引。,USE D:VFP,数据库与数据表,学生成绩表,.DBF EXCLUSIVE,INDEX ON,总分,TAG,总分,ASCENDING CANDIDATE,4.3.4,索引的使用,1,索引文件的打开与关闭,(,1,)利用菜单方式打开索引,【,例,4.32】,在“学生成绩表”中,假设已对表按“籍贯”和“班级”两个字段建立了普通索引,要求显示排序后的结果。,
29、操作步骤:,打开“学生情况表”文件,进入“浏览”窗口。,选择“表”“属性”命令,进入“工作属性区”对话框。打开“索引顺序”下拉列表框,选择索引表达式“学生情况表:籍贯,+,班级”,如图,4-67,所示。,单击,“,确定,”,按钮,则表中的记录顺序先按,“,籍贯,”,字段降序显示,,“,籍贯,”,相同的再按,“,班级,”,降序显示,如图,4-68,所示。,注意:将数据表中的数据按某一字符型字段排序,实际上是按该字段值的字母顺序进行排序。,例,4.33,】,打开,“,学生成绩表,”,的同时打开单索引文件总分,.,CDX,。,在命令窗口输入命令序列,如图,4-69,所示,结果显示的是按总分索引后的记
30、录顺序,按总分升序排列。,l,单独打开索引文件,格式,:,SET INDEX TO,?,ADDITIVE,功能:打开当前表的一个或多个索引文件。,说明:,ADDITIVE,表示打开指定的索引文件时不关闭原先已经打开的索引文件。,【,例,4.34,】,“,学生成绩表,”,已建立结构复合索引文件,“,学生成绩表,.cdx,”,,在其中依次先后有,“,学号,”,和,“,总分,”,索引项,要求按,“,总分,”,索引项显示表中记录的顺序。,在命令窗口依次输入如下命令:,USE,“d:vfp,数据库与数据表,学生成绩表,.dbf”EXCLUSIVE,SET INDEX TO“d:vfp,数据库与数据表,学
31、生成绩表,.cdx”,SET ORDER TO,总分,LIST,在,VFP,主窗口中显示以,“,总分,”,为索引项的,“,学生成绩表,”,记录顺序,如图,4-70,所示,(,3,)关闭索引文件,格式:,SET INDEX TO,功能:关闭当前工作区所打开表的所有单索引和非结构复合索引文件,格式,:,CLOSE INDEX,功能:关闭所有工作区中打开表的所有单索引和非结构复合索引文件。,4.3.5,删除索引,当某个索引不再使用时,就可以把它删除。,1,用“表设计器”删除索引,【,例,4.35】,删除“学生情况表”中以“籍贯,+,班级”为索引表达式建立的普通索引。操作步骤:(,1,)打开“学生情况
32、表”,选择“显示”“表设计器”命令,进入“表设计器”对话框。(,2,)在“表设计器”对话框中,单击“索引”标签,弹出如图,4-71,所示的对话框。选定要删除的索引名“籍贯,+,班级”,然后单击“删除”按钮,则该索引项消失。,3,)单击“确定”按钮,弹出消息对话框,单击“是”,即可完成删除索引的操作。,2,用命令删除索引,格式:,DELETE TAG ALL,,,功能:删除打开的复合索引文件中的索引标识。,说明:,ALL,选项用于删除所有的索引标识。如果所有的索引标识都被删除,则索引文件也将被删除。,【,例,4.36,】,删除,“,学生情况表,”,中以,“,学号,”,字段建立的主索引。,操作:输
33、入如下命令:,USE“d:vfp,数据库与数据表,学生情况表,.dbf”EXCLUSIVE,DELETE TAG,学号,建立表之间的联系,1,、永久关系,建立关联的表具有相同属性的字段;每个表都以该字段建立索引。,一对一关系,表,1,到表,2,之间的一对一关系:定义表,1,中的同属性字段为主索引,表,2,中的同属性字段为候选索引或主索引。如职工信息表和职工工资表,一对多关系,表,1,的同属性字段为主索引,表,2,中的同名字段为普通索引或惟一索引。班级和学生表,多对多关系,数据完整性,保证数据正确的特性,包括实体完整性、域完整性、参照完整性。,实体完整性,:保证表中记录惟一的特性,一个表中不允许
34、出现重复的记录。主关键字和候选关键字的设定。,2,、,域完整性,通过域约束规则(字段有效性规则),在插入或修改字段值时被激活,检验数据输入的正确性。,定义字段有效性规则的项目:规则,信息,默认值。,P114,3,、参照完整性与表间的联系,当插入,删除或修改一个表中的数据时,通过该参照引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确。,步骤:,先建立好表间的关系,清理数据库(”数据库“菜单中选择”清理数据库”命令),右键单击表间的联系在弹出的菜单中选择“编辑参照完整性”中进行设置。,参照完整性规则:,更新规则、删除规则、插入规则。,P116,4.3.6,排序,1,什么是排序,索引是为
35、表建立索引文件,利用索引打开数据库可以改变记录的逻辑顺序。利用索引的数据库,记录的原来位置并没有改变,只是处理顺序变化了。而排序是将记录按照指定的顺序重新排列,并产生一个新的表文件,实现从物理上对数据库的重新组织。,2,用,SORT,命令建立排序文件,格式,:,SORT TO ON /A/D/C,,,/A/D/C,ASCENDING,DESCENDING FOR WHILE,FIELDS,FIELDS LIKE,FIELDS EXCEPT,功能:将当前工作区的表按指定字段的值排序后,存储到新的表文件中。,说明:,(,1,)如果新表文件名中不包括扩展名,则自动为它指定的扩展名为,.DBF,。如果
36、文件名不存在,则自动创建;如果存在,则提问是否覆盖原文件。,(,2,),ON,后面的参数为指定排序的字段名,将记录按字段值的增大(,/A,升序)或减少(,/D,降序)排列,默认是升序,参数,/C,只能在字符字段名后,表示排序时不区分大小写字母,默认是区分大小写。同时,不能对备注或通用字段排序。,(,3,)当对多重字段排序时,可用,ASCENDING,(升序)或,DESCENDING,(降序)对所有字段统一按升序或降序排序。,(,4,),FIELDS,表示指定新表中包含的字段,默认包含原表所有字段。,【,例,4.37,】,对,“,学生情况表,”,按以下要求排序:,(,1,)只对男同学按,“,班级
37、字段降序排列,当班级相同时再按,“,出生日期,”,字段升序排列。,(,2,)将排序结果存放到名为“班级排序,.dbf”,新表中,并要求新表只包含学号、姓名、性别、班级、出生日期等,5,个字段。,命令序列如下:,use d:vfp,自由表,学生情况表,exclusive,sort to d:vfp,自由表,班级排序,on,班级,/D,,出生日期,/A FOR,性别,=,女,fields,学号,姓名,性别,出生日期,班级,use d:vfp,自由表,班级排序,.dbf,display all,在主窗口显示排序结果,如图,4-72,所示。,4,.4 多重工作区的使用,在前面所讲的各种操作都是对
38、当前打开的一个数据表进行的,即使按先后顺序打开不同的数据表,也是在打开后一个数据表的同时关闭前一个数据表,当前数据表为打开的数据表。在实际应用中,经常需要同时对几个数据表的数据进行操作,而,VFP,为我们提供了同时处理多数据表的功能。,4.4.1,工作区的概念,在,VFP,中,每打开一个数据表文件,就是把表文件从外存调入内存,在内存中占用一个存储区域,此存储区域就称为工作区。,VFP,系统允许最多可以同时打开,32767,个数据表,即提供,32767,个工作区。在一个工作区中最多只能打开一个表,如果再打开另一个表,则系统自动关闭前一个已打开的数据表。如果要同时打开多个数据表文件,则需指定多个工
39、作分别打开。无论打开多少工作区,任一时刻,都只能选择一个工作区进行工作,此工作区称为当前工作区。,4.4.2,工作区号和别名,在,VFP,中共设置了,32767,个工作区,每个工作区都有一个编号,称为工作区号,编号从,1,到,32767,。系统默认编号为,1,的工作区为当前工作区,即启动,VFP,系统,打开表时,该表文件自动被调入,1,号工作区。,别名是指给工作区取的一个除工作区以外的名字。在,VFP,中,对前,10,个工作区除使用,110,为编号外,其别名还可以依次用,AJ10,个字母来表示。可以在一个工作区中打开数据表的同时给这个工作区定义一个别名。,格式:,USE ALIAS,功能:打开
40、指定的数据表文件,并给该文件一个别名。,【,例,4.38,】,打开,“,学生成绩表,”,,并给该文件定义一个别名为,“,XSCJ,”,。,USE,学生成绩表,ALIAS XSCJ,4.4.3,工作区的选择,当需要同时对多个数据表进行处理时,须使用选择工作区命令。,格式:,SELECT,功能:选择指定的工作区为当前工作区。,说明:,(,1,)启动,VFP,后,默认工作区为,1,号工作区。,(,2,),SELECT 0,具有独特功能,系统自动从空闲工作区中选择区号最小的工作区作为当前工作区。,(,3,)选择工作区命令对任何工作区的表及其记录指针均不产生影响。,(,4,)对于其他工作区的表,只能读取
41、该区中记录指针指向的当前记录。读取其他工作区字段数据的格式是:,-,或,.,。其中工作区的别名也可以用区号,AJ,,但不能使用区编号,132767,。,【,例,4.39,】,多工作操作。,SELECT 1&,也可用,SELECT A,USE,学生情况表,ALIAS XSQK,SELECT 0&2,号工作区是最小空闲工作区,故选择,2,号工作区,USE,学生成绩表,ALIAS XSCJ,SELECT XSQK&,返回,1,号工作区,?学号,姓名,B.,高等数学,&,其中高等数学是,2,号工作区的字段,4.4.4,多个表的打开与关闭,4.4.4,多个表的打开与关闭,在当前工作区打开数据表可使用,U
42、SE,命令。,格式:,USE IN/AGAIN ALIAS,功能:在指定的工作区打开一个表。,说明:,(,1,),IN/,指定要打开表所在的工作区。,IN 0,为最低可用的工作区。省略时为当前工作区。,(,2,),AGAIN,子句可使一个表同时在多个工作区中打开。,(,3,)当在另一个工作区中再次打开一个表时,在新工作区中的表继承了原工作区中的表的属性。例如,如果一个表以只读或独占访问方式打开,然后又在一个工作区中打开,那么在新的工作区中表也以只读或独占访问方式打开。,(,4,)若用户在打开表时没有用,ALIAS,选项给出别名,表文件的主名是自然的别名。,在当前工作区关闭表可以使用以下命令。,
43、格式,1,:,USE IN,功能:关闭工作区已打开的表。,格式,2,:,CLOSE ALL,功能:关闭所有打开的表,同时释放所有内存变量。,格式,3,:,CLOSE TABLES,功能:关闭当前数据库中所有打开的表。,格式,4,:,CLOSE TABLES ALL,功能:关闭所有数据库中所有打开的表及自由表。,例,4.40,】,用,USE,命令直接指定工作区并打开数据表文件。,USE F:VFP,自由表,学生情况表,IN 1,USE F:VFP,自由表,学生成绩表,IN 2,4.4.5,数据表的物理连接,前面介绍过,APPEND FROM,命令,此命令主要是指数据表的纵向连接,除此以外数据表还
44、可以横向连接,即物理连接。物理连接是指将两个数据表连接生成一个新的数据表文件,新表文件中的字段从两个数据表中选取。,格式:,JOIN WITH,TO FOR,FIELDS,功能:在当前数据表文件和,指定的工作区中的数据表文件中,把满足条件的记录按指定的字段名连接起来,生成一个新的数据表,.DBF,文件。,说明:,(,1,),FOR,为必选项,指定两个表文件连接的条件,只有满足条件的记录才被连接。,(,2,),FIELDS,指定新表文件中所包含的字段,字段必须是原来两个表中的字段。如果缺省此选项,新表文件中的字段是原来两个表中的所有字段,字段名相同的只保留一项。,【,例,4.41,】,把,“,学生情况表,”,和,“,学生成绩表,”,进行横向连接,生成一个新的表文件名为,XSZF,,新表文件中包括学号、姓名和总分,3,个字段,连接条件是把两个表中学号相同的记录放在新表中,并浏览表,XSZF,的记录。,操作:在命令窗口中输入下列命令序列,如图,4-73,所示,






