45
Visual FoxPro 程程程程 河河河河河河河河河 22/6/9

Visual FoxPro 程序设计

Embed Size (px)

DESCRIPTION

Visual FoxPro 程序设计. 河南财专信息工程系. 2014/11/8. 第 3 章 查询与统计. 3.1 排序与索引 3.2 数据查询 3.3 数据统计与汇总 3.4 多表操作. 第 3 章 查询与统计. 3.1 排序与索引. 1. 排序 (Sort) 排序是将表记录的顺序按指定的字段重新排列,生成一个新的表文件。 格式: SORT TO〈 文件名 〉ON〈 字段名 1〉[/A][/D][/C][ , 〈 字段名 2〉[/A][/D][/C] … ][ 范围 ][FIELDS〈 字段名表 〉][FOR/WHILE〈 条件 〉] - PowerPoint PPT Presentation

Citation preview

Page 1: Visual FoxPro  程序设计

Visual FoxPro 程序设计

河南财专信息工程系

23/4/20

Page 2: Visual FoxPro  程序设计

第 3章 查询与统计

3.1 排序与索引 3.2 数据查询 3.3 数据统计与汇总 3.4 多表操作

Page 3: Visual FoxPro  程序设计

1.1. 排序排序 (Sort)(Sort)排序是将表记录的顺序按指定的字段重新排列,生成一个新的表文件。格式: SORT TO 〈文件名〉 ON〈字段名 1〉 [/A][/D][/C][ ,〈字段名 2〉 [/A][/D][/C]…][ 范围 ][FIELDS 〈字段名表〉 ][FOR/WHILE 〈条件〉 ]功能:按指定的字段对表记录进行排序,生成一个新的表文件。说明: 1.选项 A为升序, D为降序,若缺省 A和 D,则系统默认为升序。 C为忽略大小写。 2. 数值型数据按数值大小排序,日期型数据按年月日的顺序进行比较排序,字符型数据按字符的 ASC 码大小排序。

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 4: Visual FoxPro  程序设计

例 1:将 TEACHER 记录按月收入升序排列,生成一个名为 ATEACHER 的表文件。USE TEACHERSORT TO ATEACHER ON 月收入 USE ATEACHERLIST

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 5: Visual FoxPro  程序设计

例 2:将 TEACHER 表记录按性别升序和月收入降序排列,生成 BTEACHER 表文件。USE TEACHERSORT TO BTEACHER ON 性别 /A, 月收入 /DUSE BTEACHERLIST

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 6: Visual FoxPro  程序设计

2.2. 索引索引 (Index)(Index)( 1)索引的概念索引文件是表文件的一个辅助性文件,它是将记录的顺序按关键字重新排列,所存储的仅是记录指针的逻辑顺序,而不改变记录的物理顺序和记录号。与排序文件相比,索引文件占用的存储空间小,查询速度快。VFP 的索引文件有两种类型:单索引文件( IDX )和复合索引文件( CDX )。单索引文件只包括一个索引关键字(如 teacher 表按月收入字段建立索引文件)。复合索引文件允许包含多个索引项(如 teacher 表按性别和月收入两个字段建立索引文件),每个索引项可指定一个索引标识( Index Tag ),作为索引文件的别名。

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 7: Visual FoxPro  程序设计

复合索引文件又分为结构复合索引和非结构复合索引。结构复合索引是和表名相同的文件主名(如 teacher 表的结构复合索引文件名为 teacher.cdx ),它随表的打开而打开,在表记录的添加、删除和修改时会自动更改。非结构复合索引是用户为它另起了名字的文件(扩展名仍为 CDX ),使用时要用相应的打开命令来打开。

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 8: Visual FoxPro  程序设计

( 2)索引文件的建立单索引文件的建立格式: INDEX ON 〈索引表达式〉 TO〈索引文件名〉 [FOR〈条件〉 ][UNIQUE] [ADDITIVE]复合索引文件的建立格式: INDEX ON 〈索引表达式〉 TAG〈索引标识〉 [OF〈复合索引文件名〉 ] [FOR 〈条件〉 ] [ASCENDING/DESCENDING] [UNIQUE] [ADDITIVE]功能:建立索引文件。

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 9: Visual FoxPro  程序设计

说明:1. 索引表达式的数据类型可以是字符型、数值型、日期型、逻辑型,但不能是备注型和通用型。2. 索引表达式可以是一个字段,也可以是多个字段,当为多个字段时要用连接运算符 +/- 号将多个字段连接起来,并要求各字段的数据类型要一致。3. 若有 UNIQUE 选项,表示在索引项中若有相同的字段值时只记录第 1项。4.ADDITIVE 选项表示在建立新的索引文件时而不关闭原来打开的索引文件。

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 10: Visual FoxPro  程序设计

5. 索引标识为索引文件的别名。若只有 TAG〈索引标识〉而缺省 OF〈复合索引文件名〉选项,则建立的索引文件属于结构复合索引文件,若有 OF〈复合索引文件名〉选项则建立的索引文件属于非结构复合索引文件。6.ASCENDING 为升序, DESCENDING 为降序。若缺省升序和降序,则默认升序。降序只能在结构复合索引文件中设置,而不能在单索引文件和非结构复合索引文件中设置。

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 11: Visual FoxPro  程序设计

例 1:以月收入为索引关键字对 TEACHER 表建立单索引文件,索引文件名为 ITEACHER.IDX 。USE TEACHERINDE ON 月收入 TO ITEACHERLIST

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 12: Visual FoxPro  程序设计

例 2:为 TEACHER 表建立一个以姓名降序排列的结构复合索引文件(系统自动生成索引文件名 TEACHER.CDX ),索引标识为 XM。

USE TEACHERINDE ON 姓名 TAG XM DESCLIST

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 13: Visual FoxPro  程序设计

例 3:为 TEACHER 表建立一个以教研室升序,月收入降序排列的结构复合索引文件(系统自动生成索引文件名 TEACHER.CDX ),索引标识为 JYSYSR 。USE TEACHERINDE ON ASC( 教研室 )- 月收入 TAG JYSYSR LIST

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 14: Visual FoxPro  程序设计

例 4:为 TEACHER 表建立一个以教研室升序,月收入升序排列的非结构复合索引文件,索引标识为 JYSYSR ,索引文件名为 TEAC.CDX 。USE TEACHERINDE ON ASC( 教研室 )+ 月收入 TAG JYSYSR OF TEACLIST

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 15: Visual FoxPro  程序设计

( 3)索引文件的打开索引文件建立时生成的索引文件呈打开状态。结构复合索引文件随表的打开而打开。其他索引文件可用下列命令打开:格式 1: SET INDEX TO [ 索引文件表 ]功能:打开当前表指定的索引文件,最多可以同时打开 7个索引文件。若缺省索引文件名,则关闭当前打开的索引文件。格式 2: USE 〈表名〉 INDEX 〈索引文件表〉功能:打开表的同时打开指定的索引文件。

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 16: Visual FoxPro  程序设计

( 4)设置主控索引格式: SET ORDER TO [ 〈数值表达式〉 /〈单索引文件名〉 /[TAG 〈索引标识〉 ][OF 〈复合索引文件名〉 ]功能:在打开的索引文件中指定主控索引文件或在打开的复合索引文件中设置主索引标识。说明:数值表达式的值为 0-7,表示打开的第 N个索引文件为当前有效的索引。若未指定主控索引,则系统默认为 1。若指定 0,则退出索引控制,恢复表记录顺序。

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 17: Visual FoxPro  程序设计

例:同时打开 TEACHER 表的索引文件 ATEACHER 、 BTEACHER 、 CTEACHER 。

USE TEACHERSET INDE TO ATEACHER,BTEACHER,CTEACHERLIST && 显示 ATEACHERSET ORDE TO 2 LIST && 显示 BTEACHERSET ORDE TO CTEACHERLIST && 显示 CTEACHERSET ORDE TO 0LIST && 显示 TEACHER

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 18: Visual FoxPro  程序设计

( 5)索引文件的关闭当表关闭时索引文件也随之关闭。用 CLOSE ALL 命令关闭所有文件。用 SET INDEX TO 关闭当前打开的索引文件。( 6)索引的更新自动更新:当表中的数据发生变化时,所有当前打开的索引文件会自动更新。重新索引:对于未打开的索引文件,可用 REINDEX 命令重新索引。例:设 TEACHER 表按月收入建立的索引文件为 ITEACHER 。若索引文件已打开,当第三条记录的月收入增加 500 元时,索引文件自动更新,若索引文件未打开,当第五条记录的月收入增加 500 元,需重新索引。

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 19: Visual FoxPro  程序设计

操作如下:USE TEACHERINDE ON 月收入 TO ITEACHERLISTREPL RECO 3 月收入 WITH 月收入 +500LIST &&索引文件呈打开状态,索引文件自动更新。SET INDE TO &&关闭索引文件。REPL RECO 5 月收入 WITH 月收入 +500 LIST &&索引文件未打开,索引文件未更新。SET INDE TO ITEACHER &&打开索引文件。LISTREINLIST

3.1 3.1 排序与索引排序与索引

第 3章 查询与统计

Page 20: Visual FoxPro  程序设计

3.2 3.2 数据查询数据查询

1.1. 顺序查询顺序查询在表中查询记录有两条命令:( 1) LOCATE 命令格式: LOCATE [ 范围 ] FOR/WHILE 〈条件〉功能:在表中查找满足条件的记录。例:在 TEACHER 中查找职称为副教授的记录。USE TEACHERLOCA FOR 职称 ="副教授 "DISP

第 3章 查询与统计

Page 21: Visual FoxPro  程序设计

( 2) CONTINUE 命令格式: CONTINUE功能:与 LOCATE 命令配合,用于继续查找。如上例继续查找职称为副教授的记录:CONTDISP

3.2 3.2 数据查询数据查询

第 3章 查询与统计

Page 22: Visual FoxPro  程序设计

2.2. 索引查询索引查询在索引文件中查询记录也有两条命令:(1)FIND 命令格式: FIND 〈字符串〉 /〈数字〉功能:在索引文件中查找与索引关键字相匹配的数据记录。例:用 FIND 命令在 TEACHER 中查找姓马的记录。USE TEACHERINDE ON 姓名 TO ITEACHERFIND 马DISP

3.2 3.2 数据查询数据查询

第 3章 查询与统计

Page 23: Visual FoxPro  程序设计

(2)SEEK命令格式: SEEK〈表达式〉功能:与 FIND 功能相同,但允许用表达式查找。在查找字符型数据时需加定界符。例: USE TEACHERINDE ON 姓名 TO ITEACHERSEEK 马 && 错误的命令(未加定界符) SEEK " 马 "DISPINDE ON 月收入 TO BTEACHERSEEK 400+480DISPFIND 400+480 && 错误的命令(不能用表达式)

3.2 3.2 数据查询数据查询

第 3章 查询与统计

Page 24: Visual FoxPro  程序设计

3.3 3.3 数据统计与汇总数据统计与汇总1.1. 计数命令计数命令格式: COUNT [ 范围 ][FOR/WHILE 〈条件〉 ] [TO 〈内存变量〉 ]功能:统计满足条件的记录数。例:分别统计 TEACHER 中男、女教职工人数。USE TEACHERCOUN FOR 性别 =" 男 " TO MENCOUN FOR 性别 =" 女 " TO WOMEN?" 男教工人数为: ",MEN?" 女教工人数为: " ,WOMEN?" 男女教工人数为: ",MEN+WOMEN

第 3章 查询与统计

Page 25: Visual FoxPro  程序设计

2.2. 求和命令求和命令格式: SUM [ 数值型表达式表 ][范围 ][FOR/WHILE 〈条件〉 ][TO 〈内存变量表〉 ]功能:对当前表中的数值型字段的表达式求和。例:对 TEACHER 中的月收入求和。USE TEACHERSUM 月收入

3.3 3.3 数据统计与汇总数据统计与汇总

第 3章 查询与统计

Page 26: Visual FoxPro  程序设计

3.3. 求平均数命令求平均数命令格式: AVERAGE [ 数值型表达式表 ][范围 ][FOR/WHILE 〈条件〉 ][TO 〈内存变量表〉 ]

功能:对当前表中的数值型字段的表达式求平均数。

例:对 TEACHER 中的月收入求平均数。USE TEACHERAVER 月收入

3.3 3.3 数据统计与汇总数据统计与汇总

第 3章 查询与统计

Page 27: Visual FoxPro  程序设计

4.4. 计算命令计算命令格式: CALCULATE 〈表达式表〉 [范围 ][FOR/WHILE 〈条件〉 ][TO 〈内存变量表〉 ]功能:计算表达式的值。说明:表达式表中的函数有计数函数 CNT(),求和函数 SUM (〈数值型表达式〉),求平均数函数 AVG (〈数值型表达式〉),最大值函数 MAX (〈表达式〉),最小值函数 MIN (〈表达式〉),净现值函数 NPV (〈数值型表达式〉)和标准差函数 STD (〈数值型表达式〉)等系统函数。

3.3 3.3 数据统计与汇总数据统计与汇总

第 3章 查询与统计

Page 28: Visual FoxPro  程序设计

例:计算 TEACHER 表的月收入平均数、合计数、最大值、最小值,并统计记录个数。USE TEACHERCALC AVG( 月收入 ),SUM( 月收入 ),MAX( 月收入 ),MIN( 月收入 ),CNT()

3.3 3.3 数据统计与汇总数据统计与汇总

第 3章 查询与统计

Page 29: Visual FoxPro  程序设计

5.5. 汇总命令汇总命令格式: TOTAL TO 〈文件名〉 ON 〈关键字〉 [范围 ] [FIELDS 〈 N型字段名表〉 ][FOR/WHILE 〈条件〉 ]功能:在当前表中,对关键字相同的记录的数值型字段求和,并将结果存入一个新表。说明:在分组求和之前须按分组关键字段建立索引。例:对 TEACHER 表按教研室分组求和,将分组求和结果放在 TEMP 中。

3.3 3.3 数据统计与汇总数据统计与汇总

第 3章 查询与统计

Page 30: Visual FoxPro  程序设计

USE TEACHERINDE ON 教研室 TO ITEACHERTOTA TO TEMP ON 教研室USE TEMPLIST

3.3 3.3 数据统计与汇总数据统计与汇总

第 3章 查询与统计

Page 31: Visual FoxPro  程序设计

1.1. 工作区的选择和互访工作区的选择和互访VFP 在内存中提供了 32767个工作区,工作区编号从 1到 32767。每个工作区只允许打开一个表,一个表只能在一个工作区打开。前 10个工作区除使用编号外,还依次使用了A-J的工作区别名。

VFP内存中的工作区

3.43.4 多表操作多表操作

第 3章 查询与统计

工作区号 1 2 … 32767

工作区别名 A B …

Page 32: Visual FoxPro  程序设计

( 1)工作区的选择格式: SELECT 〈工作区号〉 /〈工作区别名〉功能:选择指定的工作区为当前工作区。说明:若指定工作区号为 0,则选择未被使用的最小号工作区为当前工作区。

3.43.4 多表操作多表操作

第 3章 查询与统计

Page 33: Visual FoxPro  程序设计

例:在第 1工作区、第 2工作区和第 3工作区分别打开 TEACHER.DBF 、 STUDENT.DBF 、 JSGL.DBF 。SELE 1 &&选择第 1工作区为当前工作区USE TEACHERLISTSELE B &&选择第 2工作区为当前工作区USE STUDENTLISTSELE 0 &&选择未用的最小工作区(第 3工作区)为当前工作区USE JSGLLIST

3.43.4 多表操作多表操作

第 3章 查询与统计

Page 34: Visual FoxPro  程序设计

( 2)工作区的互访格式:工作区别名 .字段名功能:在当前工作区访问指定工作区打开表的字段。 例 1:在不同工作区分别打开 teacher 和 student 表,在当前工作区访问其他工作区。SELE 1USE TEACHERSELE 2USE STUDENT?姓名 && 显示当前工作区打开表当前记录的姓名 于得水?A. 姓名 && 显示指定工作区打开表当前记录的姓名  张三

3.43.4 多表操作多表操作

第 3章 查询与统计

Page 35: Visual FoxPro  程序设计

例2:有一单价表DJ.DBF和一用户表USER.DBF如下,要求计算出本月各用户的费用。

DJ.DBF:

USER.DBF :

3.43.4 多表操作多表操作

第 3章 查询与统计

Page 36: Visual FoxPro  程序设计

SELE 1USE DJSELE 2USE USERREPL ALL 金额 WITH 用水 *A.水价 + 用电 *A.电价 + 用气*A.煤气价LIST

3.43.4 多表操作多表操作

第 3章 查询与统计

Page 37: Visual FoxPro  程序设计

2.2. 表的关联表的关联( 1)关联的概念关联就是令在不同工作区打开表的记录指针建立一种临时的联动关系,使一个表的记录指针移动时另一个表的记录指针能随之移动到匹配的记录。在关联的两个表中,当前表是主动表,称为父表,别名工作区中的表是被动表,称为子表。两个表必须有相同的字段才能建立两个表的关联,这个相同的字段称为关键字段。( 2)关联的种类有一一关系、一多关系、多一关系和多多关系。在关联的两个表中,若父表的一条记录对应子表的一条记录叫一一关系,父表的一条记录对应子表的多条记录叫一多关系。其他关系依此类推。

3.43.4 多表操作多表操作

第 3章 查询与统计

Page 38: Visual FoxPro  程序设计

关联的种类 父 表 子 表一一关系 一条记录 一条记录一多关系 一条记录 多条记录多一关系 多条记录 一条记录多多关系 多条记录 多条记录

一一关系可以看作是一多关系或多一关系的一个特例, VFP能够处理一多关系和多一关系,但不处理多多关系。

关联的种类及对应关系关联的种类及对应关系

3.43.4 多表操作多表操作

第 3章 查询与统计

Page 39: Visual FoxPro  程序设计

(3)建立关联的命令格式: SET RELATION TO 〈关键表达式〉 INTO〈工作区别名〉功能:通过关键表达式将当前表和别名工作区表建立关联。说明:子表应在关键字上建立索引。例:有一图书调价单 TJD.DBF 和一订货单 DHD.DBF如下,要求用 TJD 中的新价修改 DHD 中的单价,并改正金额字段值。

3.43.4 多表操作多表操作

第 3章 查询与统计

Page 40: Visual FoxPro  程序设计

DHD.DBF :

3.43.4 多表操作多表操作

第 3章 查询与统计

TJD.DBF :

Page 41: Visual FoxPro  程序设计

SELE 1USE TJDINDE ON 书名 TO TJDIDSELE 2USE DHDSET RELA TO 书名 INTO AREPL ALL 单价 WITH A. 新价 ,金额 WITH 单价 *册数LIST

3.43.4 多表操作多表操作

第 3章 查询与统计

Page 42: Visual FoxPro  程序设计

3.3. 表的联接表的联接联接是将当前工作区的表和指定工作区的表按照关键字段进行联接,形成一个新表。格式: JOIN WITH 〈工作区号 /别名〉 TO〈新表名〉 FOR 〈联接条件〉 [FIELDS 〈字段名表〉 ]功能:联接两个表,生成一个新表。例:现有 TEACHER 和 TEACHER1 两个表如下 , 要求按姓名将 TEACHER 和 TEACHER1联接起来,生成一个 TEACHER2 表,新表包括姓名、性别、学历、教研室和职称字段。

3.43.4 多表操作多表操作

第 3章 查询与统计

Page 43: Visual FoxPro  程序设计

TEACHER.DBF :

3.43.4 多表操作多表操作

第 3章 查询与统计

Page 44: Visual FoxPro  程序设计

TEACHER1.DBF :

3.43.4 多表操作多表操作

第 3章 查询与统计

Page 45: Visual FoxPro  程序设计

SELE 1USE TEACHERSELE 2USE TEACHER1JOIN WITH A TO TEACHER2 FOR 姓名 =A. 姓名 FIEL 姓名 ,性别 ,学历 ,A.教研室 ,A.职称USE TEACHER2LIST

3.43.4 多表操作多表操作

第 3章 查询与统计