记录在数据表文件中是按照输入时的顺序排列的,称为热物理顺序, VFP 用记录号予以标识。
3.6.1 数据表排序
数据表排序就是把数据表中的记录按照某个字段值的大小顺序重新排列,作为排序依据的字段称为“关键字”。排序操作的结果生成一个新的数据表文件,其结构和数据可以与源文件完全相同,也可以取自源文件的一部分字段。排序可以按照关键字的值从小到大的顺序进行,也可以按照关键字值由大到小的顺序进行;前者称为升序,后者称为降序。
格式: SORT TO < 文件名 >ON< 字段名 1>[/A][/D][/C]
[< 字段名 2>[/A][/D][/C] … ][ASCENDING/DESCENDING]
[< 范围 >][FOR< 条件 >][WHILE< 条件 >][FIELDS< 字段名表 >]
功能:将当前数据表中指定范围内满足条件的记录,按指定字段的升序列或降序重新排列,并将排序后的记录按 FIELDS 子句指定的字段写入新的表文件中。
说明:
① ON 子句中字段名 1 、字段名 2 等为排序关键字,不包括逻辑型字段、备注型字段和通用型字段。其中,字段名 1 为主要排序关键字,字段名 2 为次要关键字,依此类推;排序时先比较主关键字的值,当主关键字值相同时,再比较次关键字的值,依此类推。
② FIELDS 子句指定排序以后的新表所包含的字段个数;若无此选项,则新表中包含原表中的所有字段。
③选项 /A 表示按字段值的升序排列,可以省略不写; /D 表示按字段值的降序排列; /C 表示按指定的字符型字段排序时,不区分字线的大小写。
④如果对所有关键字段均按升序或降序方式排序,则可以使用 ASCENDING 或 DESCENDING 选项。
⑤排序后,原来的表文件仍存在,且原记录顺序和数据内容不改变。
3.6.2 数据表索引
1. 基本概念
索引
索引是由指针构成的文件,这些指针逻辑上按照索引关键字的值进行排序。索引文件和表文件分别存储,并且不改变表中记录的物理顺序。实际上,创建索引是创建一个由指向表文件记录的指针构成的文件。如果要根据特定顺序处理表记录,可以选择一个相应的索引。使用索引不仅可以重新安排数据表中处理记录的顺序,还可以加速对表的查看和访问。
( 2 )索引的类型
从索引的组织方式上分, VFP 中的索引有以下三类。
独立索引
独立索引是指在索引文件中只能包含一个单一的关键字或者组合关键字的索引。
结构复合索引
结构复合索引是指在索引文件中可以包含多个索引项的索引,其中每个索引项称为索引标识。
③非结构复合索引
( 3 )索引关键字
索引关键字是指在数据表中建立索引用的字段或字段表达式,可以是表中的单个字段,也可以是表中几个字段组成的表达式。创建索引文件,就是根据索引关键字值的大小从逻辑上重新字排数据表中各条记录的组织顺序。
( 4 )索引关键字的类型
主索引
主索引是指在指定字段或字段表达式中不允许出现重复的索引,它要求该索引关键字的值必须唯一,不允许重复。
候选索引
候选索引和主索引具有相同的特性。
惟一索引
惟一索引指索引文件对每一个特定的关键字只存储一次,而忽略后面出现重复值的记录。
④普通索引
普通索引指此索引字段的数据允许出现重复值,并且索引项中也允许出现重复值。
2. 建立索引
( 1 )在表设计器中建立索引
利用表设计器不仅可以很方便地创建表结构,也为创建索引提供了一个非常直观的交互环境。具体操作是:在项目管理器中选定需要建立索引的表,单击“修改”按钮,打开表设计器窗口,选择“索引”选项卡。
( 2 )命令建立索引
格式 1:INDEX ON< 索引关键字表达式 >TAG< 索引标识名 >
[UNIQUE|CANDIDATE][ASCENDING|DESCENDING][FOR< 条件 >]
功能:建立结构复合索引。
说明:
① < 索引关键字表达式 > 可以是单个字段,也可以是多个字段组合。
② TAG< 索引标识名 > 表示在复合索引文件中建立一个指定的索引标识。
③ UNIQUE 表示建立惟一索引, CANDIDATE 表示建立候选索引。不带这两个选项,表示建立普通索引。
④ ASCENDING|DESCENDING 表示索引关键字以递增或递减的方式建立索引,默认为升序。
⑤ FOR< 条件 > 表示仅对数据表中满足条件的记录建立索引。
格式 2 : DELETE TAG ALL |< 索引标识名 >
功能:从复合索引文件中删除复合索引或指定的索引项。
说明:使用 ALL 选项将删除复合索引文件中的全部索引项,该复合索引文件将自动被删除。使用 < 索引标识名 > 选项只删除指定的索引项。
3. 按索引顺序浏览记录
( 1 )菜单方式
在项目管理器中选定表,单击“浏览”按钮,打开浏览窗口,然后选择“表 | 属性”命令,打开“工作区属性”对话框。在“索引顺序”下拉列表框中选择当前要使用的某个索引项,单击“确定”按钮后,浏览窗口中的记录就会按照所选的索引顺序排列。
( 2 )命令方式
格式: SET ORDER TO [TAG< 索引标识名 >]
功能:在打开的复合索引文件中设置一个索引标识作为主标识,使数据表中的记录按该索引顺序处理。
说明:不带 TAG< 索引标识名 > 选项,表示取消使用任何索引。
3.6.3 数据表查询
1.FIND 命令
格式: FIND< 字符串 >|< 数值 >
功能:在索引文件中找到索引关键字值与指定字符串或数值相符的第 1 条记录并将记录指针指向它。
说明:
①只有对已经建立过索引的数据表文件才能使用该命令,并且索引文件的关键字必须是要查找的字段。
②该命令只能查找字符型和数值型的索引关键字,字符串可以省略定界符。
③当通过字符型内存变量检索时,命令中必须使用宏替换“ & ”,表示按内存变量的内容检索。
④检索到匹配的记录时,记录指针将指向该记录。
2.SEEK 命令
格式: SEEK< 表达式 >[ORDER[TAG]< 索引标识名 >]
[ASCENDING|DECENDING]
功能:在索引文件中查找关键字内容与表达式相同的第 1 条记录。
说明:
①只有对已经建立过索引的数据表文件才能使用该命令,并且索引文件的关键字必须是要查找的字段。
②该命令可以处理任何类型的关键字表达式。当查找字符型常量时,需要使用字符串定界符。
③可以直接查找字符型、数值型、日期型、逻辑型内存变量,不需要任何变换。
④ ORDER 选项指定按复合索引中的哪个索引项定位。
⑤ ASCENDING|DECENDING 选项指定以升序或降序搜索数据表。
3.6.4 数据表统计与汇总
1. 数据表的统计
( 1 )计数命令
格式:
COUNT[< 范围 >][FOR< 条件 >][WHILE< 条件 >][TO< 内存变量名 >]
功能:在当前数据表文件中,统计指定范围内满足条件的记录个数。
说明:
①如果默认全部选项,则统计数据表中的全部记录个数。
② TO< 内存变量名 > 选项指定内存变量,用来存放统计结果。如果没有此项,统计结果只显示不保存。
( 2 )求和命令
格式: SUM[< 字段表达式表 >][< 范围 >][TO< 内存变量名表 >| TO ARRAY< 数组名 >][FOR< 条件 >][WHILE< 条件 >]
功能:对当前数据表中满足条件的记录根据指定的数值型字段表达式按列求和。
说明:
①没有任何选项时,对当前数据表中的所有数值型字段求和。
② < 字段表达式表 > 指定求和的各个字段,各字段之间用逗号分隔。若没有此项,则对全部数值型字段分别按列求和。
③ TO< 内存变量名表 > 指定保存求和结果的各内存变量,其数目必须与求和字段的数目相同。 TO ARRAY< 数组名 > 指定保存求和的结果的数组,该数组必须已经存在。
( 3 )求平均值命令
格式: AVERAGE[< 字段表达式表 >][< 范围 >][TO< 内存变量名表 >|
TO ARRAY< 数组名 >][FOR< 条件 >][WHILE< 条件 >]
功能:对当前数据表中满足条件的记录按指定的数值型字段求平均值。
说明:各选项的含义与 SUM 命令相同。
2. 数据表的分类汇总
数据表的分类汇总也叫做同类项合并或分类求和,是对数据表中的数值型字段按照排序或索引关键字值的不同分类,按组分别求和。
格式:
TOTAL ON< 汇总关键字 >TO < 表文件名 >[FIELDS< 字段名表 >]
[< 范围 >][FOR< 条件 >][WHILE< 条件 >]
功能:在当前数据表的指定范围内,以汇总关键字的值分类,对满足条件的记录按指定的数值字段求和,并将结果保存在新的表文件中。
说明:
①使用 TOTAL 命令前,当前表必须按 < 汇总关键字 > 进行排序或索引。
②如果不指定范围、条件和 FIELDS 选项,则对全部记录的所有数值型字段按关键字值进行分类求和;否则,只对指定范围内满足条件的记录按指定的字段分类求和。
③分类求和的结果将产生一个新的表文件,其结构与当前表文件相同,但不包括备注型字段。
④数值型字段求和时,如果求和结果的长度超过该字段定义的宽度,系统会自动修改新表的数值字段宽度以存放该结果。
|