排序及多表操作_第1页
排序及多表操作_第2页
排序及多表操作_第3页
排序及多表操作_第4页
排序及多表操作_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1Visual FoxPro 程序设计查询、统计和多表操作2教学目标掌握建立排序和建立索引的方法,比较其异同掌握顺序查询和索引查询的方法,比较其异同掌握使用工作区实现多表操作的方法掌握建立表之间的关联的方法3重点建立排序和建立索引的方法顺序查询和索引查询的方法使用工作区实现多表操作的方法建立表之间的关联的方法4排序与索引排序与索引 为了高效方便地存取数据,往往要求表记录以某一定为了高效方便地存取数据,往往要求表记录以某一定的顺序排放或显示,因此,的顺序排放或显示,因此,Visual FoxPro提供了两种提供了两种方法重新组织数据,即排序和索引。方法重新组织数据,即排序和索引。 排序是从物理上

2、对表进行重新整理,按照指定的关排序是从物理上对表进行重新整理,按照指定的关键字段来重新排列表中数据记录的顺序,并产生一个新键字段来重新排列表中数据记录的顺序,并产生一个新的表文件。由于新表的产生即费时间也浪费空间,实际的表文件。由于新表的产生即费时间也浪费空间,实际中很少用。中很少用。 索引是从逻辑上对表进行重新整理,按照指定的关索引是从逻辑上对表进行重新整理,按照指定的关键字段的建立索引文件。一个表文件可以建立多个索引键字段的建立索引文件。一个表文件可以建立多个索引文件,但对于打开的表文件,任何时侯只有一个索引文文件,但对于打开的表文件,任何时侯只有一个索引文件起作用,此索引文件称为主控索引

3、。件起作用,此索引文件称为主控索引。查询、统计和多表操作查询、统计和多表操作5表的排序表的排序【格式格式】SORT TO ON /A | /D /C , /A | /D /C .ASCENDING | DESCENDING FOR WHILE FIELDS 【功能功能】对当前打开的表,按指定的字段进行排序,对当前打开的表,按指定的字段进行排序,生成新的表文件。生成新的表文件。 表的排序6 生成的排序文件也是一个数据库文件。生成的排序文件也是一个数据库文件。 范围、条件的含义同范围、条件的含义同COPY TO命令。命令。 用作排序的字段的数据类型允许是用作排序的字段的数据类型允许是N、C、D、L

4、型。型。 /A 表示升序表示升序 /D 表示降序表示降序 /C 表示不区分大小表示不区分大小写写 当有多个关键字段时,先按字段当有多个关键字段时,先按字段1的值排列,其值相的值排列,其值相同的,再按字段同的,再按字段2的值排列。的值排列。 原库中的记录发生变化,排序文件不能自动完成同原库中的记录发生变化,排序文件不能自动完成同步修改。步修改。 该命令执行后,当前表不变,产生的新表不会自动打该命令执行后,当前表不变,产生的新表不会自动打开。开。 占空间、废时间,很少用。占空间、废时间,很少用。【例例】将将STUD.DBF按性别进行降序排列按性别进行降序排列 USE STUD SORT TO ST

5、UD2 ON 性别性别/D 71索引及索引文件的概述索引及索引文件的概述 索引是以索引文件的形式存在的,它是根据指定的索引索引是以索引文件的形式存在的,它是根据指定的索引关键字表达式建立的。索引文件可以看成索引关键字的值关键字表达式建立的。索引文件可以看成索引关键字的值与记录号之间的对照表,关键字可以是一个字段,也可以与记录号之间的对照表,关键字可以是一个字段,也可以是几个字段的组合。在建立索引文件时,把表所有记录的是几个字段的组合。在建立索引文件时,把表所有记录的索引关键字表达式的值按指定顺序排序,并把每个索引关索引关键字表达式的值按指定顺序排序,并把每个索引关键字表达式值与该值在表中所对应

6、的记录对应起来,保存键字表达式值与该值在表中所对应的记录对应起来,保存在索引文件中。在索引文件中。 索引文件必须与原表一起使用,查询时根据索引关键字索引文件必须与原表一起使用,查询时根据索引关键字表达式的值先在索引文件中找到某字段所在的记录号,然表达式的值先在索引文件中找到某字段所在的记录号,然后再到表里直接定位。这样的查找方式使顺序查找和随机后再到表里直接定位。这样的查找方式使顺序查找和随机查找都有较高的效率。打开索引文件时,将改变表中记录查找都有较高的效率。打开索引文件时,将改变表中记录的逻辑顺序,但并不改变表中记录的物理顺序。的逻辑顺序,但并不改变表中记录的物理顺序。表的索引8 一个表文

7、件可建立多个索引文件,也可同时打开多个索一个表文件可建立多个索引文件,也可同时打开多个索引文件,但在同一时间内只有一个索引起作用,这个索引引文件,但在同一时间内只有一个索引起作用,这个索引称为主控索引。称为主控索引。 Visual FoxPro系统中支持两种不同的索引文件类型,系统中支持两种不同的索引文件类型,即单索引文件和复合索引文件。即单索引文件和复合索引文件。 单索引文件是根据一个索引关键字表达式(或关键字)单索引文件是根据一个索引关键字表达式(或关键字)建立的索引文件,文件扩展名为建立的索引文件,文件扩展名为.IDX,它可用,它可用INDEX命命令的各种形式建立。单索引文件分为标准和压

8、缩两种类型。令的各种形式建立。单索引文件分为标准和压缩两种类型。 复合索引文件是指索引文件中可以包含多个索引标识复合索引文件是指索引文件中可以包含多个索引标识,扩展名为扩展名为.CDX。每个索引标识与单索引文件类似,也可。每个索引标识与单索引文件类似,也可以根据一个索引关键字表达式(或关健字)建立。每一个以根据一个索引关键字表达式(或关健字)建立。每一个索引标识均有一个特殊的标识名(索引标识均有一个特殊的标识名(TAG)。标识名由字母)。标识名由字母或下划线开头,由字母、数字或下划线组成,长度不超过或下划线开头,由字母、数字或下划线组成,长度不超过10个字符。用户可以利用标识名来使用标识,向复

9、合索引个字符。用户可以利用标识名来使用标识,向复合索引文件中追加标识。复合文件中标识的数目,仅受内存和磁文件中追加标识。复合文件中标识的数目,仅受内存和磁盘空间的限制。盘空间的限制。9索引可分为下列四种类型:索引可分为下列四种类型:(1)主索引)主索引 主索引是一个永远不允许在指定字段和表达式中出现重主索引是一个永远不允许在指定字段和表达式中出现重复值的索引。它也是在数据库表的永久关联中创建参照完整复值的索引。它也是在数据库表的永久关联中创建参照完整性时主表和被引用表使用的索引。每一个表只能建立一个主性时主表和被引用表使用的索引。每一个表只能建立一个主索引,只有数据库表才能建立主索引。索引,只

10、有数据库表才能建立主索引。(2)侯选索引)侯选索引 侯选索引也是一个不允许在指定字段和表达式中出现重侯选索引也是一个不允许在指定字段和表达式中出现重复值的索引。数据库表和自由表都可以建立侯选索引,一个复值的索引。数据库表和自由表都可以建立侯选索引,一个表可以建立多个侯选索引。表可以建立多个侯选索引。 10(3)普通索引)普通索引 是一个最简单的索引,允许关键字值的重复出是一个最简单的索引,允许关键字值的重复出现,适合用来进行表中记录的排序和查询。数据现,适合用来进行表中记录的排序和查询。数据库表和自由表都可以建立普通索引。库表和自由表都可以建立普通索引。(4)唯一索引)唯一索引 系统只在索引文

11、件中保留第一次出现的索引关系统只在索引文件中保留第一次出现的索引关键字值。数据库表和自由表都可以建立唯一索引键字值。数据库表和自由表都可以建立唯一索引普通索引和唯一索引可以存储在普通索引和唯一索引可以存储在.CDX独立复合索引独立复合索引文件和文件和.IDX单索引文件中。单索引文件中。112索引文件的建立索引文件的建立(1)命令方式)命令方式【格式格式】INDEX ON TO | TAG OF FOR COMPACTASCENDING | DESCENDINGUNIQUE|CANDIDATE ADDITIVE【功能功能】对当前表文件按指定的关键字建立索引文件。对当前表文件按指定的关键字建立索引

12、文件。【说明说明】:指定建立索引文件的关键字:指定建立索引文件的关键字表达式,可以是单一字段名,也可以是多个字段组成的字表达式,可以是单一字段名,也可以是多个字段组成的字符型表达式,表达式中各字段的类型只能是数值型、字符符型表达式,表达式中各字段的类型只能是数值型、字符型和日期型和逻辑型。型和日期型和逻辑型。12 当表达式是单个字段名时,字段类型不用转换;当表达当表达式是单个字段名时,字段类型不用转换;当表达式中包含多个字段时,应转换成同一类型的表达式。式中包含多个字段时,应转换成同一类型的表达式。TAG :此选项只对建立复合索引文件时有效,指定:此选项只对建立复合索引文件时有效,指定建立或追

13、加索引标识的标识名。建立或追加索引标识的标识名。OF :指定独立复合索引文件名。若有:指定独立复合索引文件名。若有此选项,表示在指定的独立复合索引文件中追加一个索引标此选项,表示在指定的独立复合索引文件中追加一个索引标识,若指定的独立复合索引文件不存在,系统将自动建立指识,若指定的独立复合索引文件不存在,系统将自动建立指定的文件。若没有此选项,表示在结构复合文件中追加一个定的文件。若没有此选项,表示在结构复合文件中追加一个索引标识,若结构复合索引文件不存在,系统将自动建立结索引标识,若结构复合索引文件不存在,系统将自动建立结构复合索引文件。构复合索引文件。FOR :表示只对满足条件的记录建立索

14、引:表示只对满足条件的记录建立索引。COMPACT:此选项只对单索引文件有效,表示建立压缩索引:此选项只对单索引文件有效,表示建立压缩索引文件。文件。ASCENDING|DESCENDING: ASCENDING表示按升序建表示按升序建立索引,立索引,DESCENDING表示按降序建立索引。缺省时,按表示按降序建立索引。缺省时,按按升序建立索引。单索引文件不能选用按升序建立索引。单索引文件不能选用DESCENDING选项选项。13UNIQUE:表示建立的是唯一索引。:表示建立的是唯一索引。CANDITATE:表示建立的是侯选索引。:表示建立的是侯选索引。ADDITIVE:表示保留以前打开的索引

15、文件。否则,除结构:表示保留以前打开的索引文件。否则,除结构复合索引文件外,以前打开的其他索引文件都将被关闭。复合索引文件外,以前打开的其他索引文件都将被关闭。新建的索引文件自动打开,并开始起作用。新建的索引文件自动打开,并开始起作用。【例例】对对STUD.DBF表文件建立出生日期单索引文件表文件建立出生日期单索引文件STUD.IDX。USE STUDINDEX ON 出生日期出生日期 TO STUD【例例】对表文件对表文件STUD.DBF,建立一个基于出生日期字段的,建立一个基于出生日期字段的结构复合索引文件。结构复合索引文件。USE STUDINDEX ON 出生日期出生日期 TAG 出生

16、日期出生日期 DESCENDING14【例例】在表文件在表文件STUD.DBF的结构复合索引的结构复合索引文件中,按学号和姓名各追加一个标识。文件中,按学号和姓名各追加一个标识。 USE STUD INDEX ON 学号学号 TAG 学号学号【例例】在表文件在表文件STUD.DBF的结构复合索引的结构复合索引文件中,先按性别再按学号追加一个标识。文件中,先按性别再按学号追加一个标识。 USE STUD INDEX ON 性别性别+学号学号 TAG 性别学号性别学号15(2)菜单方式)菜单方式 打开表文件。打开表文件。 选择选择【显示显示】|【表设计器表设计器】命令,打开表设计器对话框,命令,打

17、开表设计器对话框,选择选择“索引索引”标签。标签。 在索引名中输入索引标识名,在类型的下拉列表框中确定在索引名中输入索引标识名,在类型的下拉列表框中确定一种索引类型,在表达式中输入索引关键字表达式,在筛一种索引类型,在表达式中输入索引关键字表达式,在筛选中输入确定参加索引的记录条件,在排序序列下默认的选中输入确定参加索引的记录条件,在排序序列下默认的是升序按钮,单击可改变为降序按钮。是升序按钮,单击可改变为降序按钮。 确定好各项后,选择确定好各项后,选择“确定确定”,关闭表设计器,同时索引,关闭表设计器,同时索引建立完成。建立完成。 同样的方法也可以将以前建立的索引调出,利用表设计器同样的方法

18、也可以将以前建立的索引调出,利用表设计器上的上的“插入插入”或或“删除删除”按钮进行插入或删除。按钮进行插入或删除。注意:用表设计器建立的索引都是结构复合索引文件注意:用表设计器建立的索引都是结构复合索引文件。163索引文件的打开索引文件的打开【格式格式1】USE INDEX ORDER | | T A G O F ASCENDING | DESCENDING 【功能功能】打开指定的表文件及相关的索引文件打开指定的表文件及相关的索引文件【说明说明】:INDEX | ?:表示打开的索:表示打开的索引文件;如果选择引文件;如果选择“?”,则系统将出现,则系统将出现“打开打开”对话框,对话框,供用户

19、选择索引文件名;第一个索引文件主索引文件。供用户选择索引文件名;第一个索引文件主索引文件。:指定要打开的索引文件,索引文件中:指定要打开的索引文件,索引文件中的文件扩展名可以省略,但如果存在同名的单索引文件的文件扩展名可以省略,但如果存在同名的单索引文件和复合索引文件,必须带扩展名。和复合索引文件,必须带扩展名。 17ORDER子句:指定主控索引。选择此选项时,主控索引文子句:指定主控索引。选择此选项时,主控索引文件将不是件将不是中的第一个单索引文件,而是此中的第一个单索引文件,而是此选项指定的单索引文件或标识。选项指定的单索引文件或标识。ORDER子句中各选项的子句中各选项的含义如下:含义如

20、下:指定主控索引的编号,若指定主控索引的编号,若的值为的值为0,表示不设主控索引。,表示不设主控索引。指定的单索引文件设置为主控索引。指定的单索引文件设置为主控索引。 TAG OF :表示将:表示将中的指定标识作为主索引。中的指定标识作为主索引。OF 缺省表示为结构复合索引文件。缺省表示为结构复合索引文件。 ASCENDING | DESCENDING:表示主索引被强制以升序:表示主索引被强制以升序或降序索引;缺省此选项,主索引按原有顺序打开。或降序索引;缺省此选项,主索引按原有顺序打开。18 【格式格式2】SET INDEX TO ADDITIVE【功能功能】在已打开表文件的前提下,打开相关

21、索引文件。在已打开表文件的前提下,打开相关索引文件。【说明说明】ADDITIVE:表示保留以前打开的索引文件。否则,:表示保留以前打开的索引文件。否则,除结构复合索引文件外,以前打开的其他索引文件都将被除结构复合索引文件外,以前打开的其他索引文件都将被关闭。关闭。4索引文件的关闭索引文件的关闭【格式格式1】USE【功能功能】关闭当前工作区中打开的表文件及所有索引文件。关闭当前工作区中打开的表文件及所有索引文件。 19【格式格式2】SET INDEX TO【功能功能】关闭当前工作区中打开的所有单索引文件和独立复关闭当前工作区中打开的所有单索引文件和独立复合索引文件。合索引文件。【格式格式3】CL

22、OSE INDEXS【功能功能】关闭当前工作区中打开的所有单索引文件和独立复关闭当前工作区中打开的所有单索引文件和独立复合索引文件。合索引文件。注意:结构复合索引文件不能用以上命令关闭,它随表文件注意:结构复合索引文件不能用以上命令关闭,它随表文件的打开而打开,随表文件的关闭而关闭。的打开而打开,随表文件的关闭而关闭。5改变主索引改变主索引【格式格式】SET ORDER TO | | TAG OF IN | ASCENDING | DESCENDING【功能功能】重新指定打开的索引文件中的主索引。重新指定打开的索引文件中的主索引。【说明说明】的值为指定主索引的编号。的值为指定主索引的编号。20

23、 如果如果的值为的值为0或缺省,则恢复表文件的或缺省,则恢复表文件的原始顺序,使所有打开的索引文件都无效。原始顺序,使所有打开的索引文件都无效。【例例】打开打开STUD.DBF表文件及其相关索引文件,并指定结表文件及其相关索引文件,并指定结构复合索引文件中的姓名为主控索引。构复合索引文件中的姓名为主控索引。 USE STUD INDE STUD.IDX ORDER TAG 姓名姓名【例例】打开打开STUD.DBF表及其相关索引文件,改变主索引文表及其相关索引文件,改变主索引文件。件。 USE STUD INDEX STUD.IDX SET ORDER TO 4 SET ORDER TO & 使

24、所有索引均无效使所有索引均无效 6索引文件的更新索引文件的更新 当表中的记录被修改时,系统会自动地更新所打开的当表中的记录被修改时,系统会自动地更新所打开的索引文件,及时反映数据的变化。对于没有打开的索引文索引文件,及时反映数据的变化。对于没有打开的索引文件,索引不能自动更新。为避免使用旧的索引文件导致错件,索引不能自动更新。为避免使用旧的索引文件导致错误,应该使用重新索引命令更新已经建立的索引文件。误,应该使用重新索引命令更新已经建立的索引文件。 21(1)命令方式)命令方式【格式格式】REINDEX COMPACT【功能功能】重新建立已索引过的索引文件。重新建立已索引过的索引文件。【说明说

25、明】COMPACT:表示将标准的单索引文件变为压缩:表示将标准的单索引文件变为压缩的单索引文件。的单索引文件。【例例】将表将表STUD.DBF的索引文件重新索引。的索引文件重新索引。 USE STUD SET INDEX TO STUD.IDX REINDEX(2)菜单方式)菜单方式 打开表文件。打开表文件。 选择选择【显示显示】|【浏览浏览】命令命令。 22 选择选择【表表】|【重新建立索引重新建立索引】命令,系统自动根据各命令,系统自动根据各索引表达式重新建立索引。索引表达式重新建立索引。7索引的删除索引的删除(1)标识的删除)标识的删除【格式格式】DELETE TAG OF , OF .

26、 或:或:DELETE TAG ALL OF 【功能功能】从指定的复合文件中删除标识从指定的复合文件中删除标识【说明说明】OF :指定复合索引文件名,:指定复合索引文件名,若缺省,则为结构复合索引文件。若缺省,则为结构复合索引文件。(2)单索引文件的删除)单索引文件的删除【格式格式】DELETE FILE 【功能功能】删除指定的单索引文件删除指定的单索引文件 【说明说明】关闭的索引文件才能被删除,文件名必须带扩关闭的索引文件才能被删除,文件名必须带扩展名。展名。 23【例例】删除表文件删除表文件STUD.DBF的单索引文件的单索引文件STUD.IDX及结构复合索引文件中的所有标识。及结构复合索

27、引文件中的所有标识。 DELETE FILE STUD.IDX USE STUD DELETE TAG ALL24 在数据资源的管理过程中,使用最频繁在数据资源的管理过程中,使用最频繁的操作莫过于查询满足一定条件的一系列数的操作莫过于查询满足一定条件的一系列数据,从而为日常决策提供足够的判断依据。据,从而为日常决策提供足够的判断依据。对表记录的查询系统提供了两类查询命令:对表记录的查询系统提供了两类查询命令:顺序查询和索引查询。顺序查询和索引查询。 在前面介绍定位时,省略了条件定位,在前面介绍定位时,省略了条件定位,查询操作实际上就是起到了条件定位的作用。查询操作实际上就是起到了条件定位的作用

28、。 查询查询251命令方式命令方式【格式格式】LOCATE FORWHILE 【功能功能】在表指定范围中查找满足条件的记录。在表指定范围中查找满足条件的记录。【说明说明】LOCATE 命令在表指定范围中查找满足条件的第一命令在表指定范围中查找满足条件的第一条记录。条记录。:表示所需满足的条件。:表示所需满足的条件。 :指定查找范围,缺省时为:指定查找范围,缺省时为ALL,即在整个表文件,即在整个表文件中查找。中查找。 找到第一条满足条件的记录后,记录指针指向该记录,找到第一条满足条件的记录后,记录指针指向该记录,并将函数并将函数FOUND()(用于检测是否找到满足条件的记录)(用于检测是否找到

29、满足条件的记录)置为置为.T.;否则,记录指针指向;否则,记录指针指向的底部或文件结束的底部或文件结束标志,并且将函数标志,并且将函数FOUND()置为置为.F.,并在状态栏给出提,并在状态栏给出提示信息示信息“已到定位范围末尾已到定位范围末尾”。 顺序查询26 如果没有打开索引文件,查找按记录号顺序进行。若如果没有打开索引文件,查找按记录号顺序进行。若打开了索引,查找按索引顺序进行。打开了索引,查找按索引顺序进行。 该命令的最大特点是可以在没有进行排序或索引的无该命令的最大特点是可以在没有进行排序或索引的无序表中进行任意条件的查询,这是索引查询做不到的,但序表中进行任意条件的查询,这是索引查

30、询做不到的,但在大型表中查询速度和效率也是最低的。在大型表中查询速度和效率也是最低的。CONTINUE命令:命令:LOCATE找到第一条满足条件的记录后,找到第一条满足条件的记录后,可以用可以用CONTINUE继续查找下一个满足条件的记录。继续查找下一个满足条件的记录。CONTINUE命令必须在命令必须在LOCATE命令之后使用,否则出错。命令之后使用,否则出错。在在CONTINUE命令中实际隐含了前一个命令中实际隐含了前一个LOCATE命令中的命令中的条件。条件。【例例】在在STUD.DBF中查找学号前四位为中查找学号前四位为0111的同学记录。的同学记录。 USE STUD LOCATE

31、FOR 学号学号=0111272菜单方式菜单方式 首先打开表文件首先打开表文件 选择选择【显示显示】|【浏览浏览】命令。命令。 选择选择【表表】|【转到记录转到记录】|【定位定位】命令。命令。 在在“作用范围作用范围”下拉列表框中选择查询范围,下拉列表框中选择查询范围,在在FOR或或WHILE框中输入查询条件,选择定框中输入查询条件,选择定位按钮。系统将指针定位于符合条件的第一条位按钮。系统将指针定位于符合条件的第一条记录上。记录上。28 索引查询(索引查询(FIND、SEEK) LOCATE命令用于按条件进行顺命令用于按条件进行顺序定位,无论索引文件是否打开都可使序定位,无论索引文件是否打开

32、都可使用。在打开索引文件后,还可以用用。在打开索引文件后,还可以用FIND、SEEK命令进行快速检索。命令进行快速检索。 索引查询(FIND、SEEK)291FIND命令命令【格式格式】FIND /【功能功能】在表文件的主控索引中查找关键字值与在表文件的主控索引中查找关键字值与或或相匹配的第一个记录。相匹配的第一个记录。【说明说明】必须打开相应的库文件、主控索引文件。必须打开相应的库文件、主控索引文件。 查询字符串,字符串可以不用定界符括起来,但前后查询字符串,字符串可以不用定界符括起来,但前后有空格的,则必须要括进来。有空格的,则必须要括进来。 查询常数,必须使用索引关键字的完整值。查询常数

33、,必须使用索引关键字的完整值。 允许查询字符型内存变量,但必须使用宏替换函数。允许查询字符型内存变量,但必须使用宏替换函数。 由于索引文件中关键字表达式值相同的记录总是排在由于索引文件中关键字表达式值相同的记录总是排在一起的,可用一起的,可用SKIP、DISP命令来逐个查询。命令来逐个查询。 查询完满足条件的记录后,不能自然给出提示,常借查询完满足条件的记录后,不能自然给出提示,常借助于助于EOF()函数来判断查询是否完成。()函数来判断查询是否完成。 30 如果用如果用SET EXACT ON命令,则匹配必须是精确的。命令,则匹配必须是精确的。即即FIND命令中的查询内容必须与记录的关键字段

34、值完全命令中的查询内容必须与记录的关键字段值完全相等。如果用相等。如果用SET EXACT OFF命令,则匹配可以是不精命令,则匹配可以是不精确的,即只要确的,即只要FIND命令中的查询内容与记录的关键字段命令中的查询内容与记录的关键字段值的左侧相等即可。值的左侧相等即可。【例例】打开表文件打开表文件STUD.DBF,查找姓,查找姓“赵赵”的记录。的记录。 USE STUD SET ORDER TO 姓名姓名 FIND 赵赵2SEEK命令命令【格式格式】SEEK 【功能功能】在表文件的主索引中查找关键字值与在表文件的主索引中查找关键字值与值相值相匹配的第一个记录。匹配的第一个记录。【说明说明】

35、SEEK命令可以查找字符型、数值型、日期型、逻辑命令可以查找字符型、数值型、日期型、逻辑型表达式的值。型表达式的值。31 SEEK命令中的表达式的类型必须与索引表达式的类型相命令中的表达式的类型必须与索引表达式的类型相同。同。 可以查找字符、数值、日期和逻辑型字段的值。可以查找字符、数值、日期和逻辑型字段的值。 内存变量可以直接进行查询,不用进行宏替换。内存变量可以直接进行查询,不用进行宏替换。 表达式为字符串时,必须用定界符括起来。日期常量也必表达式为字符串时,必须用定界符括起来。日期常量也必须用大括号括起来。须用大括号括起来。 表达式可以为一复杂的表达式,计算机先计算表达式的值,表达式可以

36、为一复杂的表达式,计算机先计算表达式的值,然后用其值进行查询。然后用其值进行查询。 由于索引文件中关键字表达式值相同的记录总是排在一起由于索引文件中关键字表达式值相同的记录总是排在一起的,可用的,可用SKIP、DISP命令来逐个查询。命令来逐个查询。 如果用如果用SET EXACT ON命令,则匹配必须是精确的。命令,则匹配必须是精确的。【例例】用用SEEK命令在命令在STUD.DBF中查找记录。中查找记录。 USE STUD INDEX ON 是否团员是否团员 TAG 是否团员是否团员 SET ORDER TO 姓名姓名 SEEK 孙孙32统计记录数统计记录数【格式格式】COUNT FOR

37、WHILE TO 【功能功能】用于统计当前表中指定范围内满足条件的记录个数。用于统计当前表中指定范围内满足条件的记录个数。【说明说明】除非指定了除非指定了或或 FOR/WHILE ,否,否则将计算所有记录个数,如选择了则将计算所有记录个数,如选择了 TO ,则,则可将计算结果保存在可将计算结果保存在中,否则统计结果只在中,否则统计结果只在屏幕上显示。屏幕上显示。若选择了若选择了SET TALK OFF将不显示统计结果。将不显示统计结果。若若 SET DELETED OFF,则加删除标志的记录将被计算。,则加删除标志的记录将被计算。【例例】统计统计STUD.DBF中的男同学记录个数和表记录总数。

38、中的男同学记录个数和表记录总数。数据统计与计算数据统计与计算33 USE STUD COUNT FOR 性别性别=男男 TO A COUNT TO B求和求和【格式格式】SUM FOR WHILE TO | TO ARRAY NOOPTIMIZE【功能功能】对指定范围内、满足条件的记录按指定的各个表对指定范围内、满足条件的记录按指定的各个表达式分别求和。达式分别求和。【说明说明】缺省范围、条件表示全部记录。缺省范围、条件表示全部记录。 缺省数值型表达式表,表示对库中所有数值型字缺省数值型表达式表,表示对库中所有数值型字段求和。段求和。 数值型表达式表中表达式的个数应与内存变量的数值型表达式表中

39、表达式的个数应与内存变量的个数一致。个数一致。34【例例】有一表文件有一表文件GZGL.DBF内容如下,内容如下,Record# 姓名姓名 性别性别 车间车间 基本工资基本工资 岗位工资岗位工资 奖金奖金 工资总额工资总额 1 张小红张小红 女女 金工一金工一 645 340 120 1105 2 李建军李建军 男男 金工一金工一 690 370 130 1190 3 孙爱国孙爱国 男男 金工一金工一 580 340 120 1040 4 吴晓英吴晓英 女女 金工一金工一 540 360 110 1010 5 张张 斌斌 男男 金工二金工二 670 400 140 1210 6 赵赵 娜娜 女

40、女 金工二金工二 570 330 110 1010 7 赵明明赵明明 男男 金工二金工二 560 300 100 960 8 李李 菲菲 女女 机修机修 650 350 150 1150 9 苏汉胜苏汉胜 男男 机修机修 600 340 100 1040 10 罗罗 丹丹 女女 工具工具 600 350 130 1080 11 李会明李会明 男男 工具工具 670 350 120 1140对对GZGL.DBF中的基本工资、岗位工资、奖金和工资总额求和,中的基本工资、岗位工资、奖金和工资总额求和,并将结果存贮成数组并将结果存贮成数组A中。中。 USE GZGL SUM TO ARRAY A35求

41、平均值求平均值【格式格式】AVERAGE FOR WHILE TO | TO ARRAY NOOPTIMIZE【功能功能】对当前表文件中指定范围内满足条件的记录,按指对当前表文件中指定范围内满足条件的记录,按指定的数值型字段计算平均值。定的数值型字段计算平均值。 【说明说明】缺省范围、条件表示全部记录。缺省范围、条件表示全部记录。 缺省数值型表达式表,缺省数值型表达式表,表示对当前库中所有数值型表示对当前库中所有数值型字段求平均值。字段求平均值。 数值型表达式表中表达式的个数应与内存变量的个数数值型表达式表中表达式的个数应与内存变量的个数一致。一致。【例例】分别计算分别计算GZGL.DBF中的

42、男女各项收入的平均值。中的男女各项收入的平均值。USE GZGLAVER FOR 性别性别=”男男” TO ARRAY BAVER FOR 性别性别=”女女” TO ARRAY C36综合计算综合计算【格式格式】CALCULATE FOR WHILE TO | TO ARRAY 【功能功能】对当前表文件中指定范围内满足条件的记对当前表文件中指定范围内满足条件的记录进行指定的计算工作。录进行指定的计算工作。 【说明说明】可以是表中函数的任意组合。可以是表中函数的任意组合。 【例例3-44】计算计算GZGL.DBF中的人数、奖金收入的中的人数、奖金收入的平均值和最大值、工资总额的最大值、平均值。平

43、均值和最大值、工资总额的最大值、平均值。 USE STUD CALC CNT(),AVG(奖金奖金),MAX(奖金奖金),AVG(工工资 总 额资 总 额 ) , M A X ( 工 资 总 额工 资 总 额 ) T O X1,X2,X3,X4,X5 37分类汇总分类汇总【格式格式】TOTAL TO ON FIELDS FOR WHILE NOOPTIMIZE【功能功能】按关键字段对当前表文件的数值型字段进行分类按关键字段对当前表文件的数值型字段进行分类汇总,形成一个新的表文件。汇总,形成一个新的表文件。【说明说明】当前表必须在关键字上排序或索引,否则仅将关当前表必须在关键字上排序或索引,否则

44、仅将关键字段值相同的紧挨的记录值汇总。键字段值相同的紧挨的记录值汇总。 汇总命令执行后,将生成一个新的数据库文件(并汇总命令执行后,将生成一个新的数据库文件(并没有被打开)。没有被打开)。 对非数值型字段,则把关键字相同的连续记录的第对非数值型字段,则把关键字相同的连续记录的第一条记录的字段内容送入新库。一条记录的字段内容送入新库。 38 缺省待汇总字段名表,则将所有数值型字段的值进缺省待汇总字段名表,则将所有数值型字段的值进行汇总。行汇总。 若数值型字段的汇总值超过了原数据库该字段的宽若数值型字段的汇总值超过了原数据库该字段的宽度,系统会自动修改汇总库中该字段的宽度。度,系统会自动修改汇总库

45、中该字段的宽度。 汇总文件的结构与当前表的结构完全相同,汇总记汇总文件的结构与当前表的结构完全相同,汇总记录个数由录个数由的值确定的值确定 。【例例】1. 对对GZGL.DBF按按“车间车间”分类汇总。分类汇总。 USE GZGL INDEX ON 车间车间 TAG 车间车间 TOTAL ON 车间车间 TO GZCJ TOTAL TO GZCJ ON车间车间 USE GZCJ2. 对对GZGL.DBF按按“性别性别”分分类汇总。类汇总。USE GZGLINDEX ON 性别性别 TAG 性别性别TOTAL TO GZXB ON 性别性别USE GZXB39多表的操作多表的操作多表的操作 迄今

46、所讲述的对表的操作都是在一个工作区进行的,每个工作区最多只能打开一个表文件,用USE命令打开一个新的表,同时也就关闭了前面已打开的表。在实际应用中,用户常常需要同时打开多个表文件,以便对多个表文件的数据进行操作。为了解决这一问题,Visual FoxPro引入了工作区的概念。Visual FoxPro允许用户在表间建立临时关系和永久关系。40工作区与多个表工作区与多个表1工作区和当前工作区工作区和当前工作区 Visual FoxPro 能同时提供能同时提供32767个工作区。系统默个工作区。系统默认值为认值为1区。区。 在任意时刻,只有一个工作区是当前工作区,用户在任意时刻,只有一个工作区是当

47、前工作区,用户只能在当前工作区对打开的当前库进行操作。只能在当前工作区对打开的当前库进行操作。 每一个工作区都可以并且只能打开一个数据库文件。每一个工作区都可以并且只能打开一个数据库文件。 同一个数据库文件不允许同时在多个工作区打开,同一个数据库文件不允许同时在多个工作区打开,但在其它工作区中被关闭之后,可以在任意一个工作区中但在其它工作区中被关闭之后,可以在任意一个工作区中被打开。被打开。 各工作区中打开的数据库彼此相互独立(指针不受各工作区中打开的数据库彼此相互独立(指针不受影响)。影响)。412选择当前工作区选择当前工作区 每一个工作区用工作区号或别名来标识每一个工作区用工作区号或别名来

48、标识(1)工作区号)工作区号 利用数字利用数字132767来标识来标识32767个不同的工作区个不同的工作区(2)别名)别名 前前10工作区用工作区用AJ10个字母来标识。个字母来标识。 采用该工作区中已打开的数据库的库名来作别名采用该工作区中已打开的数据库的库名来作别名 用户自己定义用户自己定义 【命令格式命令格式】 :USE 数据库名数据库名ALIAS别名别名 【功能功能】 :打开数据库文件并为该数据库起一个别名。:打开数据库文件并为该数据库起一个别名。 【说明说明】给数据库起了别名后,数据库名就不是默认的别名给数据库起了别名后,数据库名就不是默认的别名了。了。42(3)工作区的选择)工作

49、区的选择 当系统启动时,当系统启动时,1号工作区是当前工作区,若想改变当号工作区是当前工作区,若想改变当前工作区,则可使用前工作区,则可使用SELECT命令来转换当前工作区。命令来转换当前工作区。【命令格式命令格式】:SELECT/【功能功能】:选择一个工作区作为当前工作区。:选择一个工作区作为当前工作区。【说明说明】: | :指定当前工作:指定当前工作区。选择工作区时,可以直接指定区号,也可以通过别名区。选择工作区时,可以直接指定区号,也可以通过别名指定工作区,二者是等效的。指定工作区,二者是等效的。 别名可以是系统规定的别名,也可以是用户规定的别别名可以是系统规定的别名,也可以是用户规定的

50、别名,甚至可以用已打开的表名替代工作区别名。此命令允名,甚至可以用已打开的表名替代工作区别名。此命令允许选用许选用“0”号工作区。如果指定号工作区。如果指定“0”,则表示选用当前,则表示选用当前未使用过的编号最小的工作区作为当前工作区。未使用过的编号最小的工作区作为当前工作区。 执行该命令后,对任何工作区中的表及记录指针均不发执行该命令后,对任何工作区中的表及记录指针均不发生影响,仅实现各个工作区之间切换。生影响,仅实现各个工作区之间切换。43【例例】在在1号和号和2号工作区内分别打开号工作区内分别打开STUD.DBF和和COURSE.DBF表文件,并选择表文件,并选择1号工作区为当前工作区。

51、号工作区为当前工作区。 SELECT 1 & 或或 SELECT A USE STUD SELECT 2 USE COURS SELECT 13非当前工作区字段的引用非当前工作区字段的引用Visual FoxPro系统对当前工作区上的表可以进行任何操作,系统对当前工作区上的表可以进行任何操作,也可以对其他工作区中的表文件的数据进行访问。在主工也可以对其他工作区中的表文件的数据进行访问。在主工作区可通过以下两种格式访问其他工作区表中的数据。作区可通过以下两种格式访问其他工作区表中的数据。格式:格式:- . 44 通过用工作区别名指定欲访问的工作区,所得到的字通过用工作区别名指定欲访问的工作区,所

52、得到的字段值为指定工作区打开的表当前记录的字段值。段值为指定工作区打开的表当前记录的字段值。【例例】在在1号和号和2号工作区打开号工作区打开STUD.DBF和和SC.DBF,在,在1号工作区内查看当前记录的学号、姓名、性别、出生日期、号工作区内查看当前记录的学号、姓名、性别、出生日期、课程号、成绩等字段内容。课程号、成绩等字段内容。SELECT AUSE STUD & 在一号工作区中打开在一号工作区中打开STUDSELECT BUSE SC & 在二号工作区中打开在二号工作区中打开SCSELECT A & 选择选择1号工作区为当前工作区号工作区为当前工作区DISPLAY 学号学号,姓名姓名,性

53、别性别,出生日期出生日期,B-课程号课程号,SC.成成绩绩45表的关联表的关联表的关联1关联的概述关联的概述 所谓表文件的关联是把当前工作区中打开的表与另一所谓表文件的关联是把当前工作区中打开的表与另一个工作区中打开的表进行逻辑连接,而不生成新的表。个工作区中打开的表进行逻辑连接,而不生成新的表。当前工作区的表和另一工作区中的打开表建立关联后,当前工作区的表和另一工作区中的打开表建立关联后,当前工作区是表的记录指针移动时,被关联工作区的表当前工作区是表的记录指针移动时,被关联工作区的表记录指针也将自动相应移动,以实现对多个表的同时操记录指针也将自动相应移动,以实现对多个表的同时操作。作。 在多

54、个表中,必须有一个表为关联表,此表常称为父在多个表中,必须有一个表为关联表,此表常称为父表,而其他的表则称为被关联表,常称为子表。在两个表,而其他的表则称为被关联表,常称为子表。在两个表之间建立关联,必须以某一个字段为标准,该字段称表之间建立关联,必须以某一个字段为标准,该字段称为关键字段。表文件的关联可分为一对一关联、一对多为关键字段。表文件的关联可分为一对一关联、一对多关联和多对多关联。关联和多对多关联。462表文件关联的建立表文件关联的建立(1)一对一关联的建立)一对一关联的建立1)命令方式)命令方式【格式格式】SET RELATION TO | INTO | ADDITIVE【功能功能

55、】将当前工作区的表文件与将当前工作区的表文件与(或工作区号)指定(或工作区号)指定的工作区中的表文件按的工作区中的表文件按或或建立关联。建立关联。【说明说明】当用当用建立关联时,关键字必须是两建立关联时,关键字必须是两个表文件共有字段,且别名表文件已按关键字段建立了索引个表文件共有字段,且别名表文件已按关键字段建立了索引文件,并已指定关键字段为主索引。文件,并已指定关键字段为主索引。 当父表文件的记录指针移动时,子表文件的记录指针根据当父表文件的记录指针移动时,子表文件的记录指针根据主索引文件指向关键字段值与父表文件相同的记录。如果子主索引文件指向关键字段值与父表文件相同的记录。如果子表中没有

56、与关键字段值相同的记录,记录指针指向文件尾,表中没有与关键字段值相同的记录,记录指针指向文件尾,EOF()为为.T.。47 当按当按建立关联时,别名表不需要打开索建立关联时,别名表不需要打开索引文件,两个表文件按照记录号相联系,父表文件的记录引文件,两个表文件按照记录号相联系,父表文件的记录指针移动时,子表文件的记录指针移至与数值表达式相等指针移动时,子表文件的记录指针移至与数值表达式相等的记录上。若找不到此记录,记录指针指向文件尾,的记录上。若找不到此记录,记录指针指向文件尾,EOF()为为.T.。ADDITIVE:表示当前表与其他工作区表己有的关联仍有效,:表示当前表与其他工作区表己有的关

57、联仍有效,实现一个表和多个表之间的关联;否则取消当前表与其他实现一个表和多个表之间的关联;否则取消当前表与其他工作区表已有的关联,当前表只能与一个表建立关联。工作区表已有的关联,当前表只能与一个表建立关联。SET RELATION TO则表示取消当前工作区与其他工作区则表示取消当前工作区与其他工作区的关联。的关联。【例例】 将表文件将表文件STUD.DBF和和SC.DBF以学号为关键字段建以学号为关键字段建立关联。立关联。48SELECT 2 & 选择工作区选择工作区2USE SC & 打开表文件打开表文件SCORE.DBFINDEX ON 学号学号 TAG 学号学号& 建立学号标识建立学号标

58、识SET ORDER TO TAG 学号学号& 指定学号为主索引指定学号为主索引SELECT 1& 选择工作区选择工作区1USE STUD& 打开表文件打开表文件STUD.DBFSET RELATION TO 学号学号 INTO 2 & 建立一对一关联建立一对一关联【例例】 将表文件将表文件STUD.DBF和和SC.DBF按数值表达式建立按数值表达式建立关联。关联。 SELECT 2& 选择工作区选择工作区2USE SC & 打开表文件打开表文件SC.DBFSELECT 1& 选择工作区选择工作区1USE STUD & 打开表文件打开表文件STUR.DBFSET RELATION TO REC

59、NO() INTO 2 492)菜单方式)菜单方式 选择选择【窗口窗口】|【数据工作期数据工作期】,弹出数据工作期窗口。,弹出数据工作期窗口。 选择选择【打开打开】,将需要用到的表在不同的工作区打开。,将需要用到的表在不同的工作区打开。 在别名列表中选择主表,再单击在别名列表中选择主表,再单击“关系关系”按钮,再在别名按钮,再在别名列表中选择子表。列表中选择子表。 如果子表文件未指定主索引,系统会打开如果子表文件未指定主索引,系统会打开“设置索引顺序设置索引顺序”对话框,以指定子表文件的主索引。对话框,以指定子表文件的主索引。 主 索 引 建 立 后 , 系 统 弹 出 的主 索 引 建 立

60、后 , 系 统 弹 出 的 “ 表 达 式 生 成 器表 达 式 生 成 器 ”(Expression Builder)对话框,在字段列表框中选择)对话框,在字段列表框中选择关联关键字段,然后单击关联关键字段,然后单击“确定确定”按钮,返回数据工作期按钮,返回数据工作期窗口。窗口。 此时在数据工作期窗口的右侧列表框中出现了子表,在父此时在数据工作期窗口的右侧列表框中出现了子表,在父表和子表之间有一单线相连,说明在两表之间已建立了一表和子表之间有一单线相连,说明在两表之间已建立了一对一关联。对一关联。50(2)一对多关联的建立)一对多关联的建立1)命令方式)命令方式【格式格式】SET SKIP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论