1、第三章,表的建立与基本操作,第三章 表的建立与基本操作,3.1 建立表结构 3.2 表结构的编辑 3.3 表的基本操作 3.4 排序与索引 3.5 查找 3.6 记录的统计与计算,第三章 表的建立与基本操作,3.1 建立表结构 数据库实际上是由多个表构成的集合,数据库的操作实质上是表的操作。Visual FoxPro中表一般包含在数据库中,称为数据库表。表也可以脱离数据库独立存在,称为自由表。从数据库内部创建的表,总是数据库表;直接创建的表是自由表。自由表可以随时添加到数据库中,成为数据库表;数据库表也可以随时移出数据库,成为自由表。,第三章 表的建立与基本操作,3.1.1 设计表结构 在利用
2、Visual FoxPro建立一个新表之前,应当先分析和设计表,了解表中记录要表示怎样的信息以及表的目的,据此设计表中的字段,从而确定表的结构。 对学生档案数据库,建立“学生”表来存储学生的个人信息,包括学号、姓名、性别、出生日期、简历等,这些内容是相对独立的,应由不同的字段来表示。而关于学生的成绩与每人选修的课程相关,VF中建立的表是二维关系表,“学生”表如果太复杂不利于操作,所以成绩和课程需要另外建表来处理。如果想知道学生的总体信息,只要将几个相关表中的数据组合,即可得到。据此,建立表3.1、表3.2、表3.3三个表分别表示学生个人信息、课程信息和成绩信息。,第三章 表的建立与基本操作,3
3、.1.1 设计表结构 Visual FoxPro系统规定其表文件最多可由255个字段组成。在设计表结构时,应遵循Visual FoxPro系统对字段名、类型、宽度和小数位的规定。 (1)字段名 字段名又称字段变量,它的命名规则与内存变量相同,最长为10个字符,允许由字母、汉字、数字和下划线组成,但必须以字母或汉字开头,中间不能有空格。 (2)字段类型 表中的每一个字段由于其数据代表的意义不同,因而都有特定的数据类型,例如姓名、成绩、出生日期这3个字段的类型是各有相同的,在Visual FoxPro中,分别用字符型、数值型或整型、日期型来表示的。熟悉各种数据类型可以帮助我们更方便地对表进行操作。
4、,第三章 表的建立与基本操作,3.1.1 设计表结构 (3)字段宽度 对每个字段都需要确定其宽度,字段宽度表示字段中可以存放数据的最大字符数。 各种数据类型的字段宽度如表3.4所示,除字符型、二进制字符型、数值型和浮动型外,其它9种字段宽度是固定不变的。,第三章 表的建立与基本操作,字段宽度,第三章 表的建立与基本操作,(4)小数位数 数值型字段、双精度型字段、浮点型字段、货币型字段有小数位。只有在需要设计时才规定小数位,否则这个规定可以省略。小数位的最大宽度必须小于字段宽度减2,即要留出小数点前的0和小数点。 另外,Visual FoxPro的表文件是真正含义的数据库表文件,所以在设计自由表
5、结构时,还需要考虑字段是否支持空值(NULL)、如何建立索引等。,第三章 表的建立与基本操作,3.1.2 建立表结构建立表结构有两种方式,一种是通过表设计器来建立,一种是通过表向导在已有的表的基础上建立一个新表。本节主要说明表设计器的建表步骤。 一、用表设计器建表 1、表设计器第一步:指定表名及保存位置 在图3.1的新建对话框中,选择表,单击“新建文件”,打开创建新文件的对话框,图3.2所示,选定保存位置,输入表文件名(如本例中“学生”),可以不输扩展名,系统会自动加上扩展名.dbf,单击“保存”按钮。 2、表设计器第二步:在表设计器中输入各字段名,设置各字段的数据类型、宽度、小数位数。 在图
6、3.3(a)刚刚打开的表设计器中,输入表3.5中给定的内容,逐次输入字段名、类型、宽度及小数位数,输入完毕的表结构如图3.3(b)所示。,第三章 表的建立与基本操作,新建对话框,学生表的表结构,第三章 表的建立与基本操作,3、表设计器第三步:录入数据完成图3.3(b)中各个字段值的设置之后,按“确定”按钮,系统显示如图3.4的对话框,单击“是”,打开图3.5输入记录窗口,表示立即输入记录值;如果单击“否”,结束表结构的设计,以后再录入数据。在图3.5中,各条记录之间用横线隔开,左边显示字段的名称,用颜色块标识当前字段的输入区的大小。用户输完一条记录后,系统自动定位到下一条记录。全部记录输入完毕
7、后,关闭编辑窗口,完成记录的录入操作,表创建完成。,第三章 表的建立与基本操作,二、用命令建表 在命令窗口中输入以下命令同样可以打开表设计器创建表。 命令格式: CREAT 表文件名.DBF 如果要建立课程表,则在命令窗口键入命令: CREAT 课程.DBF 回车之后,系统同样打开图3.3的表设计器窗口,再按照前面同样的步骤就可以建立课程表。另外,还可以用表向导建立表,利用Visual FoxPro提供的样本表,选择样本表中的结构和字段,构成所需的表结构。用向导创建的表也可以在保存之后再使用表设计器修改。,3.1建立表结构,2.1.2表结构的建立 3. 通过复制产生表结构 COPY STRUC
8、TURE TO FIELDS 例: Use 学生 Copy structure to xs1,第三章 表的建立与基本操作,3.2 表结构的编辑 3.2.1 表结构的修改 表建立之后,随着对表的操作和情况的变化,有时需要修改表结构。例如,增加字段、删除字段,修改字段名、字段类型宽度、小数位、是否允许空值等,学习索引之后还要添加、修改或删除索引标识等。通常打开表设计器来修改表结构,也可以命令方式来修改表结构。例如,在“学生”表增加“年龄”字段,将奖学金改为数值型。,第三章 表的建立与基本操作,1、菜单方式 在“文件”菜单中选择“打开”命令,在“打开”对话框中选择要打开的表,如双击打开“学生”表。
9、在“显示”菜单中选择“浏览学生”命令,打开“学生”表浏览窗口。 再次选择“显示”菜单,选择“表设计器”命令,打开表设计器,如图3.6选中“简历”字段,单击“插入”按钮,则在“简历”字段前插入“新字段”,修改字段名称为“年龄”,字段类型为“整型”,然后单击“确定”弹出图3.7示“是否永久修改”,单击“是”。 注意:修改表结构同设计表结构类似,但在修改时要注意防止数据的丢失。,第三章 表的建立与基本操作,2、命令方式 格式:MODIFY STRUCTURE 功能:打开表设计器修改表结构。 说明:在打开表以后,执行MODIFY STRUCTURE命令,将打开表设计器对表结构进行修改。 注意: 修改字
10、段类型时,并不完全转换字段的内容,或者根本不转换。例如,如果将日期类型的字段转换成数值类型,字段内容是不转换的。 在更改表结构之前,Visual FoxPro自动备份当前表。在修改完以后,将备份表中包含的数据追加到新修改的表结构中。如果表中有一个备注字段,也将创建一个备注备份文件。表备份文件的扩展名为.BAK,备注备份文件的扩展名是.TBK。 当修改一个具有备注字段的表结构时,备注文件的块大小设置为当前的块大小。可以用SET BLOCKSIZE命令指定备注文件的块大小。,第三章 表的建立与基本操作,3.2.2 表结构的显示 格式1:DISPLAY STRUCTURE IN / 格式2:LIST
11、 STRUCTURE IN / 功能:两条命令的功能相同,都是显示当前打开的表文件的结构,只是DISPLAY STRUCTURE分页显示,而LIST STRUCTURE连续滚动显示。 命令说明: 显示当前打开的表的字段结构,包括每个字段的名称、类型和宽度。如果字段是数值型、双精度型、浮点型或货币型的,还将显示小数点在字段中放置的位数,也支持显示空值。 显示表中当前的记录数和最近更新的日期。如果表中有一个相关备注字段,则显示备注字段块的大小。 显示所有字段的总宽度和表的代码页。 如果建立了结构复合索引文件,则在字段名同行显示该索引的排列顺序。,第三章 表的建立与基本操作,例如,显示“学生.DBF
12、”表结构,可以使用下列命令: USE 学生 DISPLAY STRUCTURE 在图3.8中,总计的字节数为38,比各字段宽度之和多1个字节,用来存放删除标记“*”。,第三章 表的建立与基本操作,3.3 表的基本操作 3.3.1 表的打开和关闭只有刚刚创建的表是自动打开的,否则任何对表的操作,首先应当打开表。在结束对表的操作后,应及时关闭表文件,将内存中的数据存回磁盘。如果没有及时关闭文件,由于人为的误操作或突然停电等因素,有可能造成数据的破坏或损失。,第三章 表的建立与基本操作,一、表的打开 表文件的打开有两种方式:菜单方式和命令方式。 1、菜单方式。 选择“文件”菜单,单击“打开”命令。
13、单击“打开”按钮。 选择“窗口”菜单,选择“数据工作期”命令,在“数据工作期”对话框中,单击“打开”按钮。采用上述几种菜单方式后,均会出现“打开”对话框,双击要打开的表名后,即可打开表文件。 2、命令方式。 格式:USE 功能:打开表文件名。,第三章 表的建立与基本操作,二、表的关闭 关闭表文件的方法有以下几种: 1、菜单方式 选择“窗口”菜单,选择“数据工作期”命令,在“数据工作期”对话框中,选择表的别名后,单击“关闭”按钮。 2、命令方式。 使用不加表名的USE 命令,在当前工作区中关闭一个已打开的表文件。 在一个工作区中打开另一个表时,原来在该工作区中打开的表自动关闭。 CLOSE TA
14、BELS命令关闭在所有工作区打开的自由表。 CLEAR ALL、CLOSE ALL等命令也将关闭表文件。 正常退出Visual FoxPro将关闭一切文件。,第三章 表的建立与基本操作,例3.1 关闭表文件。 USE 学生 &打开学生.DBF表文件 USE &不带任何选项的USE命令关闭当前工作区打开的学生.DBF文件 USE课程 &打开课程.DBF表文件 USE成绩 &在打开成绩.DBF时自动关闭原先打开的课程.DBF表文件,第三章 表的建立与基本操作,3.3.2 表的编辑与修改 打开表文件之后,Visual FoxPro主窗口没有任何显示信息,此时应当打开浏览窗口才能查看表内容。打开浏览窗
15、口有以下几种方式: 在“项目管理器”中选定表后,单击“浏览”按钮。 在“数据工作期窗口”中选定表后,单击“浏览”按钮。 打开表后,在命令窗口中输入命令:BROWSE 或BROWSE LAST 打开表后,选择“显示”菜单命令,在下拉菜单中选择浏览命令。,第三章 表的建立与基本操作,(1)添加记录 打开浏览窗口后,在图3.10的“表”菜单中 选择“追加新记录”或在“显示”菜单中选择 “追加方式”,浏览窗口尾部会增加一条空 白记录,光标此时定位在空白记录的第一 个字段,在此空白记录处输入新的记录值 (图3.9(b)。,表菜单,第三章 表的建立与基本操作,对于备注型字段,双击备注字段,或用Ctrl+P
16、ageDown、Ctrl+PageUp命令,就会打开备注字段的编辑窗口,图3.11所示。编辑完后,关闭该窗口,此时memo的第一个字母变成大写,即Memo。 (2)修改记录 在浏览窗口中,单击要修改的字段就可以了。 (3)删除记录、 Visual FoxPro中的删除记录分为逻辑删除和物理删除两种,逻辑删除只是将记录加上删除标记,并未真正删除,还可以恢复;物理删除是从表中真正删除记录,无法恢复。,第三章 表的建立与基本操作,3.3.3 输入记录在创建表时可以根据系统提示立即输入记录,也可以不输入记录。没有记录的表叫空表,可以随时向空表追加记录,也可以向已有记录的表追加记录。 一、创建时输入记录
17、见表设计器第三步,图3.5输入记录窗口。 二、添加记录 1、追加记录 APPEND命令可以在表的末尾增加一条或多条记录。 命令格式:APPEND BLANK IN 工作区号|别名NOMENU 参数说明: BLANK:在当前表的末尾增加一条空白记录。,第三章 表的建立与基本操作,IN 工作区:指定表的工作区 IN 别名:指定表的别名 忽略该选项,新记录添加到当前工作区的表中 NOMENU:禁止在系统菜单条上显示“表”菜单,防止用户对表的格式进行编辑 2、添加备注字段APPEND命令可以把文本文件的内容复制到备注字段中。 命令格式:APPEND MEMO FROM OVERWRITE 参数说明:
18、OVERWRITE:如无,文件内容将追加到指定备注字段中;如有,用文件的内容替换备注字段当前的内容。,第三章 表的建立与基本操作,例 3.3 把stud.txt文本文件内容复制到“简历”字段中。 USE 学生 APPEND MEMO 简历 FROM stud.txt MODIFY MEMO 简历 USE,第三章 表的建立与基本操作,三、插入记录 INSERT命令可以在表的指定位置添加新记录。 命令格式: INSERT BEFOREBLANK 参数说明: BLANK:同APPEND命令,用来插入一个空记录 BEFORE:打开浏览窗口,在当前表的当前记录后插入一个新记录,无该选项,在当前表的当前记
19、录前插入一条空记录。,第三章 表的建立与基本操作,3.3.4 显示表记录 除了用菜单命令显示表记录外,还可以通过命令设置条件,有选择地显示表中的记录。 命令1:连续滚动显示LIST命令 格式:LIST OFF FOR WHILEFIELDS TO PRINTER PROMPT/TO NOCONSOLENOOPTIMIZE 命令2:分屏显示DISPLAY 命令 格式:DISPLAY OFF FOR WHILEFIELDS TO PRINTER PROMPT/TO NOCONSOLENOOPTIMIZE,第三章 表的建立与基本操作,参数说明: 1、子句: 表示命令对表文件进行操作的记录范围,一般有
20、4种选择: ALL:对表文件所有的记录进行操作。 NEXT n:只对从当前记录开始的连续若干个指定数目的记录进行操作。 RECORD n:只对第n个记录进行操作。 REST:只对从当前记录开始到表文件尾为止的所有记录进行操作。 其中,n为数值表达式的值。,第三章 表的建立与基本操作,2、FOR 和WHILE 子句: FOR:在指定的范围内,按条件逐个检查所有记录,直到该范围内的最后一条记录为止。 WHILE :在指定的范围内,按条件逐个检查所有记录,一旦遇到第一个不满足条件的记录(即逻辑表达式计算结果为.F.)时,就停止查找并结束该命令的执行。 3、FIELDS子句。 该子句用于规定当前处理的
21、字段和表达式。它有三种格式: 该子句实现对表的字段筛选,完成关系的投影运算。 4、OFF子句。 不显示记录号。如果省略了OFF,就在每个记录前显示记录号。,第三章 表的建立与基本操作,5、NOOPTIMIZE子句。 使用该子句后Rushmore优化无效。 6、O PRINTER PROMPT子句。 将命令的结果定向输出到打印机。 7、TO FILE子句。 将命令的结果输出定向到指定的文件中。 另有某些命令带有下列子句,其功能简述如下: NOCONSOLE:不向Visual FoxPro 主窗口或活动的用户自定义窗口输出。 IN /:处理非当前工作区中的表,即用或指出的非当前工作区中的表。,第三
22、章 表的建立与基本操作,3.3.5 修改记录 除了前面提到的在浏览窗口中修改表记录外,还可以用EDIT或CHANGE命令全屏幕编辑修改表记录。此外,经常使用REPLACE命令在程序中动态更新表记录。 命令格式: REPLACE WITH ADDITIVE, WITH ADDITIVE FOR WHILEIN / NOOPTIMIZE 参数说明:WITH ADDITIVE, WITH :指定用的值来代替中的数据,用的值来代替中的数据,依此类推。,第三章 表的建立与基本操作,当表达式的值比数值字段的宽度长时,REPLACE采用以下方法来处理数据: REPLACE截短表达式的小数位,然后取整剩余部分
23、。 如果此时数值字段仍然放不下表达式的值,用科学计数法在字段中保存表达式的值。 若仍放不下表达式的值,用星号代替字段内容(数据溢出)。 ADDITIVE:把对备注字段的替代内容追加到备注字段的后面。ADDITIVE只对替换备注字段有用,如果省略ADDITIVE,则用表达式的值改写备注字段原有内容。 REPLACE命令的默认范围是当前记录(NEXT 1)。 NOOPTIMIZE:使该命令的Rushmore优化无效。,第三章 表的建立与基本操作,3.3.6 删除记录 1、DELETE命令 DELETE命令是逻辑删除,只是给记录加上删除标记,这些作了删除标记的记录仍保留在表文件中。用LIST命令显示
24、时,仍然可以看到这些记录,逻辑删除的记录在记录号后用“*”表示。 命令格式:DELETE FOR WHILE IN /NOOPTIMIZE 命令说明: 根据SET DELETED ON/OFF设置的不同,操作时将产生不同结果。 SET DELETED ON:删除标记有效,处理记录时忽略有删除标记的记录。 SET DELETED OFF(默认值):删除标记失效,处理记录时可以访问标有删除标记的记录。 FOR WHILE子句用于指定一个条件,仅给满足逻辑条件的记录做删除标记。 标有删除标记的记录可以用RECALL恢复(清除标记)。 不带选项的DELETE命令,其默认范围是当前记录(NEXT 1)。
25、,第三章 表的建立与基本操作,2、RECALL命令 该命令恢复所选表中带删除标记的记录。 命令格式:RECALL FOR WHILE NOOPTIMIZE 命令说明: 缺省范围为当前记录(NEXT 1) 一旦对表文件使用了PACK命令或ZAP命令,带删除标记的记录将永远消失,无法恢复。,第三章 表的建立与基本操作,3、PACK命令该命令将有删除标记的记录从当前表中永久删除,减少与该表相关的备注文件所占用的空间。 命令格式:PACK MEMO DBF 参数说明: MEMO:从备注文件中删除未使用的空间,但不从表中删除标有删除标记的记录。备注字段的信息保存在一个相关的备注文件内。 DBF:从表中删
26、除标有删除标记的记录,但不影响备注文件。 如果不带MEMO和DBF子句发出PACK命令,PACK命令将同时作用于表和备注文件。,第三章 表的建立与基本操作,4、ZAP命令该命令从表中删除所有记录,只留下表的结构。 命令说明: ZAP命令等价于DELETE ALL和PACK联用,但ZAP速度更快。如果SET SAFETY为ON,Visual FoxPro会提示是否要从当前表中删除记录。 ZAP命令只用来删除表的记录,表结构仍然存在。而删除文件的命令是删除整个文件,将记录与结构全部删除。,第三章 表的建立与基本操作,3.3.7 记录定位 对表记录的操作是靠记录指针定位的,它是一种内部标志,用来指出
27、表文件的当前记录。对表文件的许多操作都是对当前记录进行的。在打开表文件时,记录指针指向第一个记录。随着命令的执行,记录指针会发生移动。有时也需要人为移动记录指针,称为记录指针的定位。在表的索引文件未打开的情况下,记录指针是按表的物理顺序移动的。而在表的索引文件打开的情况下,记录指针一般是按表的逻辑顺序移动的。,第三章 表的建立与基本操作,1、绝对移动 格式1:GO/GOTO RECORD IN / 格式2:GO/GOTO TOP/BOTTOM IN / 命令说明: RECORD 指定一个物理记录号,记录指针将移至该记录。你可以省略GO或GOTO命令而只指定记录号,但如果仅指定记录号,则只能在当
28、前工作区中移动记录指针。该命令所指的物理记录号是记录在表中的物理顺序,执行格式1这条绝对移动命令,无论索引文件是否打开,均移到物理记录号所指的记录,与表的逻辑顺序无关。 TOP:记录指针指向表的第一个记录上。 BOTTOM:记录指针指向最后一个记录上。,第三章 表的建立与基本操作,2、相对移动。 格式:SKIP IN / 功能:使记录指针在表中向前或向后相对移动。 命令说明: :用于指定记录指针需要移动的记录数;缺省,记录指针移到下一条记录,相当于命令SKIP 1。如果为正数,记录指针向文件尾移动个记录;如果为负数,记录指针将向文件头移动个记录。 如果记录指针指向表的最后一个记录,并且执行不带
29、参数的 SKIP 命令时,RECNO( ) 函数返回值比表中记录总数大1,EOF( )函数返回“真”(.T.);如果记录指针指向表的第一个记录,并执行SKIP -1命令,则RECNO( )函数返回值与第一个记录的记录号相同,BOF( )函数返回“真”(.T.)。,第三章 表的建立与基本操作,3.4 排序与索引 3.4.1 排序排序命令可以对当前选定的表进行排序,并将排好序的记录输出到新表中。 命令格式: SORT TO ON /A/D /C , /A/D /CASCENDING / DESCENDING FOR WHILENOOPTIMIZE FIELDS /LIKE/ EXCEPT,第三章
30、表的建立与基本操作,命令说明:存放排序后记录的新表名,Visual FoxPro为表存取.DBF文件扩展名。ON :指定当前选定的、要排序的表中的字段名,/A/D /C:对于排序中包含的每个字段,可以指定排序顺序(升序或降序)。/A为字段指定了升序。/D指定了降序。默认情况下,字符型字段的排序顺序区分大小写。如果在字符型字段名后包含/C,则忽略大小写。ASCENDING:将所有不带/D的字段指定为升序排列。DESCENDING:将所有不带/A的字段指定为降序排列。默认范围:ALL,即所有记录。FIELDS LIKE :在新表中包含那些与字段相匹配的原表字段,新表用SORT命令创建。FIELDS
31、 EXCEPT :在新表中包含那些不与字段相匹配的原表字段。,第三章 表的建立与基本操作,3.4.2 索引 1、索引的概念 Visual FoxPro中的索引是由指针构成的文件,这些指针逻辑上按照索引关键字值的顺序排列,这种顺序称为记录的逻辑顺序。索引文件和表文件分别存储,不改变表中记录的物理顺序。 2、索引文件的类型 (1) 单项索引文件 扩展名为.IDX,只能容纳一项索引,只能用命令方式操作。 (2) 复合索引文件 扩展名为.CDX,可以容纳多项索引,索引之间用唯一的索引标识区别,每个索引标识名的作用等同于一个索引文件名。,第三章 表的建立与基本操作,复合索引文件分为两种: 结构复合索引文
32、件 结构复合索引文件的主名与表文件的主名相同。表文件打开时,它随表的打开而打开,关闭表时随表的关闭而关闭。 非结构复合索引文件 与结构复合索引文件不同,该文件的主名与表文件的主名不同,定义时要求用户为其取名。因此当表文件打开或关闭时,该文件不能自动打开或关闭,必须用户自己操作。,第三章 表的建立与基本操作,3、索引关键字的类型 索引关键字是由一个或若干个字段构成的索引表达式。索引表达式的类型决定了不同的索引方式。在Visual FoxPro中,有四种类型的索引:主索引、候选索引、普通索引和惟一索引 (1) 主索引:绝对不允许在指定的字段或表达式中有重复值。一个表只能建一个主索引。 (2) 候选
33、索引:同样不允许在指定的字段或表达式中有重复值。与主索引不同,一个表可以创建多个候选索引。 (3) 普通索引:允许在指定的字段或表达式中有重复值,在数据库库表和自由表中都可以创建普通索引。 (4) 惟一索引:也允许在指定的字段或表达式中有重复值,但是只存储索引文件中重复值的第一次出现。,第三章 表的建立与基本操作,3.4.3 建立索引 1、使用INDEX命令创建索引 命令格式: INDEX ON TO | TAG OF FOR COMPACT ASCENDING/DESCENDING UNIQUE | CANDIDATE ADDITIVE 参数说明:TO :创建一个单项索引文件名,默认的索引文
34、件扩展名为.IDX。TAG OF :创建一个复合索引文件。FOR:指定条件,索引文件只为那些满足条件的记录创建索引关键字,实现筛选数据,第三章 表的建立与基本操作,COMPACT:创建一个压缩的.IDX文件ASCENDING/DESCENDING:指定文件是升序或降序,默认为升序,本选项只对复合索引文件有效。UNIQUE:当有多个记录的值相同时,只有其中第一个记录被载入索引。 CANDIDATE:创建候选结构索引标识,只对结构复合索引标识有效ADDITIVE:指定先前打开的索引文件保持打开状态。缺省,则用INDEX命令建立索引文件时,所有先前打开的索引将关闭。,第三章 表的建立与基本操作,命令
35、说明: 该命令默认创建普通索引型索引。 索引表达式由当前表中的字段名或由字段名、函数、常数等组成的表达式构成。索引表达式可以是单一字段,也可以是多个字段的组合表达式。 索引表达式类型有4种:字符型、数值型、日期型、逻辑型 注意:组合表达式中数据类型必须一致。 (1) 创建单项索引文件,命令的基本格式如下:INDEX ON TO (2) 创建结构复合索引文件,命令的基本格式如下:INDEX ON TAG ,第三章 表的建立与基本操作,(3) 创建非结构复合索引文件,命令的基本格式如下: INDEX ON TAG OF 例3.15 降序排序 USE 学生 INDEX ON - 奖学金 TO IJX
36、J &单项索引文件的降序排序 INDEX ON 年龄 DESC TAG AGE &结构复合索引文件的降序排序 INDEX ON 奖学金 DESC TAG JXJ OF JXJ &非结构复合索引文件的降序排序,第三章 表的建立与基本操作,2、在“表设计器”中建立索引 打开表设计器,其中有三个选项卡,字段选项卡和索引选项卡,这两个选项卡都可以建立或修改索引,但二者有区别。 在字段选项卡中只能建立普通索引,索引关键字为单一字段。,第三章 表的建立与基本操作,利用索引选项卡,可以选择三种不同的索引类型,普通索引、候选索引和唯一索引。 索引关键字可以是组合字段,也可以是单一字段,索引名可以直接输入。另外
37、,除了在表达式框中输入表达式外,还可以通过表达式生成器构造复杂的表达式。方法是,单击表达式旁边的小按钮,在弹出的“表达式生成器”中构造。,第三章 表的建立与基本操作,3.4.4 使用索引 1、打开索引文件 使用索引文件,必须先打开表文件,索引文件不能脱离表文件而单独使用。 打开索引文件有两种方式,一种是在打开表文件时的同时打开索引文件;一种是在表文件打开后,用SET IDENX等命令打开索引文件。,第三章 表的建立与基本操作,(1) 用USE命令打开索引文件 命令格式: USE INDEX / ? ORDER /TAG OF ASCENDING / DESCENDING 参数说明: INDEX
38、 / ?:指定要打开的一个或多个索引文件。若是多个索引文件,中间用逗号分隔。若未指定索引文件或使用了“?”,Visual FoxPro显示“打开”对话框,提示用户选择索引文件。 ORDER / TAG OF :指定一个主控索引文件或标识,第三章 表的建立与基本操作,注意:(1)在多个单项索引文件中,按其打开文件时在索引文件名列表中的次序决定序号,与建立索引的顺序无关。(2)在同一复合索引文件中,索引标识按建立的先后次序决定序号。(3) ORDER 0,以物理记录次序显示和访问表中的记录。 ASCENDING / DESCENDING:指定显示或访问表中的记录,是升序还是降序,它并不改变索引文件
39、或标识,仅改变记录被显示或访问的次序。,第三章 表的建立与基本操作,(2)用SET INDEX 命令打开索引文件 命令格式: SET INDEX TO /?ORDER / / TAG OF ASCENDING/DESCENDING ADDITIVE 命令说明:该命令是在表文件打开后再打开索引文件,其他命令参数与USE命令相同。,第三章 表的建立与基本操作,2、关闭索引文件 格式1:CLOSE INDEXES 格式2:SET INDEX TO 命令说明:关闭当前工作区的所有索引文件。 注意: CLOSE INDEXES命令关闭所有工作区中的全部.IDX和非结构复合索引文件,表文件和结构复合索引文
40、件仍然打开。 格式3:USE 命令说明:用不带选项的USE命令关闭表文件时,当前工作区的索引文件自动关闭。,第三章 表的建立与基本操作,3、确定主控索引 在不打开或关闭任何索引的情况下转换主控索引,使用SET ORDER TO 命令 命令格式:SET ORDER TO / TAGOFIN / ASCENDING/DESCENDING 命令说明: IN /:为非当前工作区中已打开的表确定主控索引文件或主控索引标识。 若要恢复原始物理顺序显示或处理数据,则可用SET ORDER TO或SET ORDER TO 0命令。 其它选项的说明见用USE命令打开索引文件,第三章 表的建立与基本操作,例3.1
41、7 确定主控索引 USE 学生 SET INDEX TO INAME,IBIRTHDAY,AGE,NL SET ORDER TO 2 & 指定主控索引文件IBIRTHDAY.IDX LIST & 按出生日期索引显示 SET ORDER TO 4 & 指定结构复合索引文件为主控索引文件,主控索引标识SNO LIST & 按学号降序显示 SET ORDER TO TAG SNO LIST &与上条命令效果显示相同 SET ORDER TO TAG NL OF NL & 指定非结构复合索引文件NL.CDX,主控索引标识为NL LIST &按年龄显示,第三章 表的建立与基本操作,4、重建索引 当对表文
42、件做更新操作时,一切打开的索引文件会自动进行重索引,但未打开的索引文件却不会自动修改索引,以至在以后打开那些索引文件后,数据没有更新,造成索引混乱,此时需要用REINDEX命令重新索引。 命令格式:REINDEX COMPACT 命令说明: Visual FoxPro识别每种索引文件的类别(独立复合索引文件、结构复合索引文件及单项索引文件)并分别重建索引。 对使用包含UNIQUE关键字的INDEX命令或SET UNIQUE ON命令创建的索引文件,在重建索引时,仍保持UNIQUE状态。 COMPACT:将普通的单项索引(.IDX)文件转换为压缩的.IDX文件。,第三章 表的建立与基本操作,3.
43、5 查找 3.5.1 顺序查找顺序查找包括LOCATE和CONTINUE两条命令,可以查找没有建立排序和索引的表。 格式:LOCATE FOR WHILE NOOPTIMIZE 功能:按顺序搜索表,找到满足条件的第一个记录。 格式:CONTINUE 功能:按照LOCATE命令的条件,继续查找下一个满足条件的记录, 命令说明: 缺省范围是ALL。 找到满足条件的记录,记录指针指向第一条记录,可使用RECNO( )返回该记录号。并且FOUND( )返回“真”(.T.),EOF( )返回“假”(.F.)。如果找不到满足条件的记录,则FOUND( )返回“假”(.F.),EOF( )返回“真”(.T.
44、) CONTINUE命令不能单独使用,必须与LOCATE命令配合使用。可重复执行CONTINUE,直到到达范围边界或表尾。,第三章 表的建立与基本操作,3.5.2 索引查找索引查找的前提是表文件已经排序或建立并打开了索引。索引查找有两条命令,FIND和SEEK。FIND是为了和以前的版本兼容而保留的,SEEK的功能更强。 一、FIND命令。 格式:FIND / 功能:按当前主控索引,查找满足条件的第一个记录。 命令说明: FIND命令只能查找字符型或数值型数据。若是字符型数据,可以加定界符,亦可以不加定界符。不能为空值。 如果查找成功,RECNO( )函数返回第一条匹配记录的记录号,FOUND
45、( )函数返回“真”(.T.),而EOF( )函数返回“假”(.F.)。如果查找失败,则RECNO( )函数的返回值等于表的记录数加1,FOUND( )函数返回“假”(.F.),而EOF( )函数返回“真”(.T.)。,第三章 表的建立与基本操作,二、SEEK命令。 格式:SEEK ORDER / / TAG OF ASCENDING /DESCENDINGIN / 功能:按当前主控索引,搜索满足条件表达式的第一个记录,这个记录的索引关键字必须与指定的表达式匹配。 命令说明: :由常量、变量和表达式组成。若是字符型常量,则必须加定界符,可以是空字符串,也可以是数值型、逻辑型、日期型等各种类型的
46、常量、变量和表达式。 如果查找成功,RECNO( )函数返回第一条匹配记录的记录号,FOUND( )函数返回“真”(.T.),而EOF( )函数返回“假”(.F.)。如果查找失败,则RECNO( )函数的返回值等于表的记录数加1,FOUND( )函数返回“假”(.F.),而EOF( )函数返回“真”(.T.)。 其他参数含义同SET ORDER TO 。,第三章 表的建立与基本操作,3.6 记录的统计与计算 3.6.1 计数命令 格式:COUNT FOR WHILE TO 功能:在指定范围内,统计满足条件的记录数。 参数说明: 范围:缺省值为ALL。 条件:指定统计条件,缺省为指定范围内的全部
47、记录。 TO :指定用于存储统计结果的内存变量或数组。缺省,记录数仅显示在主窗口的状态条中,无法保存。 如果 SET DELETE是OFF,则带有删除标记的记录也包括在计数中。,第三章 表的建立与基本操作,3.6.2 求和命令 格式:SUM FOR WHILETO / TO ARRAY 功能:在指定范围内,对满足条件的指定数值字段或全部数值字段进行求和。 说明: 缺省范围:ALL,所有记录。 缺省条件,统计指定范围内的全部记录。 :指定要求和的一个或多个字段或者字段表达式。如果省略字段表达式列表,则对所有数值型字段求和,其实质是实现表文件数值型字段的纵向求和。 TO / TO ARRAY :将
48、数值表达式的各个求和结果依次存入或数组,列表中的内存变量名用逗号分隔。,第三章 表的建立与基本操作,3.6.3 求平均数命令 格式:AVERAGE FOR WHILETO / TO ARRAY 功能:在指定范围内,计算数值表达式或字段的算术平均值。 说明:AVERAGE命令各参数的含义同SUM命令。,第三章 表的建立与基本操作,3.6.4 计算命令 格式:CALCULATE FOR WHILETO / TO ARRAY NOOPTIMIZE 功能:在指定范围内,对表文件的字段或字段表达式做统计计算。 说明:可由下列函数任意组合而成: AVG():求的算术平均值。 SUM():求的和。 CNT(
49、):统计记录个数。 MIN():求的最小值或最早值,该可以是各种数据类型。 MAX():求的最大值或最新值,该可以是各种数据类型。,第三章 表的建立与基本操作,NPV(,):求期货交易流动资金的净当前值,并按通常的定期利息进行折算。表示十进制的利率;表示以字段、表达式或数值表达式表示的一批流动资金,每一流动资金必须是正数或负数,当为字段或字段表达式时,则表中的每条记录中该字段的值被认为是流动资金。表示最初投资,如果没有,则最初投资假设为第一期投资结束时资金,最初投资在第一条记录为负数时表示流出资金。 STD():求的标准偏差。所谓标准偏差,即是每个值与差的平均值,较小的标准偏差表示偏离标准值较小。 VAR():求的方差。所谓方差是指标准偏差的平方。,