《表与数据库的基本操作.ppt》由会员分享,可在线阅读,更多相关《表与数据库的基本操作.ppt(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第四章第四章 表与数据库的基本操作表与数据库的基本操作 4.1 概述4.1.1 VFP表的相关知识 在VFP中,表是处理数据,建立关系数据库和应用程序的基本单元,它用来存储收集来的各种信息。表由若干行与若干列组成,表中的每一行称为一个记录,每一列称为一个字段。在计算机内存储为一个表文件,其扩展名为.DBF。 VFP管理的表分为自由表和数据库表。在逻辑上不与其他表发生联系而单独管理的独立表称为自由表;将相互联系的若干个表放入一个数据库容器内进行管理,这些表称为数据库表。数据库表与自由表相比增加了特殊的功能和属性,如可以使用长表名和长字段名,可以为表中的字段设置默认值,可以设置字段、记录的有效性规
2、则,可以设定表间的永久关系等。4.1.2 VFP命令格式及使用规则命令格式及使用规则1)命令格式)命令格式VFP命令通常由两部分组成。第一部分是命令动词,指明了该命令的功能。第二部分是跟随在命令动词后面的短语,这些短语通常用来对所要执行的命令进行某些限制性的说明。命令一般格式如下: ,2)命令短语)命令短语命令动词规定要执行的操作,而命令短语指出操作的的范围、条件、字段、结果输出位置等内容。命令短语又称为子句。见下表: 命令短语具体内容含义子句ALL表示数据表的所有记录RECORD n指定第n条记录NEXT n从当前记录开始的n条记录REST从当前记录到文件结束的所有记录FIELDS子句FIE
3、LDS说明操作数据表的各字段名,之间用“,”隔开。不选择该子句,则命令对表中所有字段进行操作FOR子句FOR见下面说明 WHILLE子句WHILLE见下面说明 TO PRINTER|TO FILE子句TO PRINTER |TO FILE 选择时,结果输出到打印机或文件,否则输出到屏幕 说明:说明: FOR子句 FOR 的作用是:在规定的范围中,按条件检查全部记录,即从第一条记录开始,满足条件的记录就执行该命令,不满足就跳过该记录,继续搜索下一记录,直到最后一条记录。若省略则默认为ALL。 WHILE子句WHILE 的作用是:在规定的范围中,只要条件成立,就对当前记录执行该命令,并把记录指针指
4、向下一条记录,一旦遇到使条件不满足的记录,就停止搜索并结束该命令的执行。即遇到第一个不满足条件的记录时,就停止执行该命令,即使后面还有满足条件的记录也不执行。若省略范围则默认为REST。3) 命令及子句的使用规则命令及子句的使用规则VFP的命令有的比较短,而有的则相当长,书写时应遵循如下规则:(1) 任何命令必须以命令动词开头,而命令中的各个子句可以按任意次序排列,各个子句以一个或多个空格隔开。(2) 一条命令的最大长度为254个字符,一行写不下时,可以使用“;”续行。(3) 命令动词和子句的动词可以用其前4个字母缩写表示。例如DISPLAY可写成DISP。但从程序的可读性来考虑,不提倡略写命
5、令动词。(4) 命令中的字符大小写可以混合使用,系统不区分大小写,为了美观,可以将命令关键字大写,而其他内容小写。 4.2数据表的创建及其基本操作数据表的创建及其基本操作 4.2.1表结构及字段的基本要素1.表的结构在VFP中,存储数据的表和经常使用的表格基本相似,表中的列代表记录中的字段(Field),字段包含字段名和字段值。所有字段名的集合构成了表的第一行(表头),即数据表的结构(Structure);所有字段值的集合分别构成了表的每一行,即表的记录(Record)。2表中存储数据的数据类型 为了正确存储数据、处理数据和有效利用存储空间,创建表时必须定义字段的数据类型。字段的数据类型有13
6、种3字段的基本要素(1)字段名 字段名是表中列的名称,是数据库的变量,即字段变量。对表和数据库操作时,可根据字段名引用表中数据。字段的命名应满足以下要求: 字段名由字母、汉字、数字及下划线组成,但必须以字母或汉字开头,中间不能有 空格; 数据库表的字段名最长为128个字符(自由表字段名长度不得超过10个字符)。(2) 字段类型和宽度 字段类型决定存储在字段中的值的数据类型,字段宽度决定存储数据的宽度和取值范围。VFP中可使用的字段类型如表4.3中所示,常用的有字符型、数值型、日期型、逻辑型、备注型、通用型等几种。(3)空值(NULL) 选择是否允许字段为空。字段空值与空字符串、数值0具有不同的
7、含义,是指尚未输入具体数值的数据。如果字段不允许为空,则输入数据时必须输入相应的数据,否则被设置为默认值(例如,数值型被默认为0)。允许字段为空时,可暂时不输入数据,而且不会出错。(4)显示控制(数据库表所具有的属性) 用来定义字段的显示格式、输入掩码和字段标题。格式为字段在表单、浏览窗口等界面中的显示格式;输入掩码用来限制或控制用户输入的格式,以避免一些错误格式的输入;而标题可以设定字段名显示时的文字内容,默认为字段名。(5)字段有效性检验(数据库表所具有的属性) 用来定义字段的有效性规则、违反规则的提示信息和字段的默认值。有效性检验可以防止用户输入错误数据。(6)字段注释(数据库表所具有的
8、属性) 为字段添加注释便于数据库维护。注释只起提示作用,不会对具体操作带来任何影响。4.2.2 表的创建表的创建 在VFP中数据表的建立有下列方法:一种方法是使用表设计器;另一种方法是使用表向导。无论是使用表设计器,还是用表向导,都必须遵循以下步骤进行:创建表结构。输入记录。1)创建表结构 表结构的设计可以通过VFP提供的【表设计向导】和【表设计器】来实现,也可以用SQL命令来建立表的结构。 (1)启动表设计器可以用下述方法启动表设计器:1用菜单方式启动表设计器 VFP启动后,在主窗口的【文件】菜单中选择【新建】命令,则出现一个新建对话框,如图4.3所示。 然后从该对话框中选中【表(T)】按钮
9、,再单击【新建文件】按钮,弹出创建对话框。在【输入表名】文本框中输入新建数据表的表名(例如输入dab),选择保存类型为“表/DBF(.dbf)”,单击【保存】按钮,即启动表设计器对话框。 2用Create命令启动表设计器命令格式:命令格式:Create 说明说明:为指定要创建的表名,包括路径信息。例如在命令窗口中输入“Create c:dab.dbf”,按回车键就可启动表设计器。创建的表(dab.dbf)将保存在C盘根目录下。(2)创建表结构启动表设计器后,通过表设计器能方便地设计出符合自己需要的表结构。2)输入记录数据表结构建立好后,就可以向数据表中输入记录了。VFP提供了两种记录输入方式:
10、 立即输入方式。 追加输入方式。 命令格式命令格式:APPEND BLANK 功能:功能:在当前表的末尾追加新记录。4.2.3 表的打开与关闭表的打开与关闭1)表的打开 可以通过下述方法来打开表文件:(1)用菜单打开表从【文件】菜单中选择【打开】命令,进入【打开】对话框,在【文件类型】列表中选取“表(*.dbf)”项,再选择所要打开的表文件,单击【确定】按钮后就打开选中的表。表文件打开后,就可以对其进行操作,如浏览表中的记录,向表中追加新记录,修改表结构等操作。(2)用USE 命令打开表命令格式:命令格式:USE IN 工作区号|Alias功能:功能:打开一个表文件。 2)表的关闭对数据表的操
11、作完成后,应将表关闭,关闭表有多种命令。(1)关闭当前工作区打开的表。命令格式:命令格式:USE说明:说明:USE命令后不跟任何子句时,则关闭当前工作区打开的表。(2)关闭当前打开的所有表:CLOSE ALL命令命令格式:命令格式: CLOSE ALL功能:功能:关闭所有打开的数据库;关闭所有工作区中的表和索引,并选择1号工作区为当前工作区。CLEAR ALL命令 命令格式:命令格式:CLEAR ALL功能:功能:关闭所有工作区中打开的表,选择1号工作区为当前工作区,同时释放所有内存变量。4.2.4表中记录的显示当数据表建立好后,必要时需要显示(查看)数据表中的内容,显示数据表中的记录可通过下
12、列操作完成。1)菜单操作(1)浏览显示从【文件】菜单中选择【打开】命令,打开要浏览显示的数据表;从【显示】菜单中选择【浏览】命令;2)命令操作DISPLAY 命令和LIST 命令用于将当前表中的记录显示到VFP的主窗口或用户自定义窗口中。命令格式:命令格式:LIST| DISPLAY FIELDS FOR | WHILE OFF TO PRINTER PROMPT|TO FILE v 【例4.2】 在VFP主窗口中显示学生档案表(dab.dbf)中的全部记录。在命令窗口中输入下列命令序列: USE dab &打开dab.dbf表 LIST Use &关闭dab.dbf表 在主窗口中显示结果如下
13、图所示v 【例4.3】显示学生档案表(dab.dbf)中机械制造4班的所有女学生的记录,且只显示学号、姓名、性别、出生日期和专业班级字段,不显示记录号。在命令窗口中输入如下命令序列: use dab disp all FOR 专业班级=机械制造4班 and 性别=女 fields 学号,姓名,性别,出生日期,专业班级off use 在主窗口中显示结果如右图所示4.2.5记录指针的定位记录指针的定位1)记录指针的概念一个数据表文件中可能包含成千上万条记录,要对哪一条记录操作,就存在记录定位的问题。在VFP中,对任何打开的数据表文件,都提供了一个记录指针,用于完成记录的定位。记录指针指向的记录称为
14、当前记录。对表中记录的操作一般都是针对当前记录进行的。刚打开的数据表,记录指针总是指向第一条记录(首记录),对数据表的操作将改变记录指针的位置,例如用LIST命令显示表中的全部记录后,记录指针指向数据表的末尾。每一个数据表都有开始和结尾标志,可以用BOF()函数和EOF()函数来测试,根据函数的返回值“.T.”或“.F.”判断记录指针的位置。2)记录指针的定位(移动)在建立数据表时,每条记录都有一个编号,称为记录号,记录号是依据输入记录的顺序从1开始编号。对记录指针的定位,实际上就是将记录指针移到相应的记录号上。移动记录指针的方法有菜单操作方式和命令操作方式两种。(1)菜单操作方式(2)命令操
15、作方式1记录指针的绝对移动绝对移动是将记录指针直接定位到指定的记录上。命令格式:命令格式:GOTO |TOP|BOTTOM功能:功能:将记录指针定位到指定的记录上。说明:说明:的值指明记录号,即直接按给定的记录号定位。选择TOP或BOTTOM则分别将记录指针定位到表文件的首、尾记录上。 v 【例4.4】用GO命令移动学生档案表(dab.dbf)中的记录指针。在命令窗口输入如下命令序列: USE dab GO 5 &记录指针指向记录号为5的记录 GO TOP &记录指针指向首记录 GO BOTTOM &记录指针指向尾记录 use2记录指针的相对移动命令格式:命令格式:SKIP 功能:功能:以当前
16、记录为基准向上或向下移动记录指针。 说明:说明:的值指明记录指针移动的相对记录数;若为负数时,则表示记录指针向上移动,否则向下移动。缺省,则记录指针向下移动1条记录。v 【例【例4.5】用】用SKIP命令移动学生档案表命令移动学生档案表(dab.dbf)中的记录指中的记录指针。在命令窗口输入如下命令序列:针。在命令窗口输入如下命令序列: USE dab GO 5 SKIP 3 &指针从当前记录开始向下移动指针从当前记录开始向下移动3条记录条记录 SKIP &指针从当前记录开始向下移动指针从当前记录开始向下移动1条记录条记录 SKIP -2 &指针从当前记录向上移动指针从当前记录向上移动2条记录
17、条记录 Use43 表的编辑与维护表的编辑与维护431 数据表的修改1)表结构的修改在VFP中,利用表设计器来修改表结构。具体操作为:打开需要修改结构的表文件。再从【显示】菜单中选择【表设计器】命令,则进入表设计器对话框。在表设计器对话框中修改表的各字段要素的值(如字段名,数据类型等)。 也可以在命令窗口中输入命令来启动表设计器,然后对表结构进行修改。 启动表设计器的命令为:MODIFY STRUCTURE 功能:功能:打开表设计器,修改表结构。2)记录数据的修改)记录数据的修改(1)使用菜单命令修改记录)使用菜单命令修改记录(2)用)用BROWSE命令修改记录命令修改记录该命令有许多控制记录
18、显示的子句,这里仅介绍它的常用命令格式。该命令有许多控制记录显示的子句,这里仅介绍它的常用命令格式。命令格式:命令格式:BROWSE FIELDS FOR 功能:在浏览窗口显示记录。修改数据更为方便。功能:在浏览窗口显示记录。修改数据更为方便。(3)用)用REPLACE命令修改记录命令修改记录命令格式:命令格式:REPLACE 范围范围 WITH ADDITIVE, WITH ADDITIVEFOR|WHILE 功能:更新表的记录内容。功能:更新表的记录内容。v 【例【例4.6】 用用BROWSE命令对学生档案表(命令对学生档案表(dab.dbf)中的记录进行修改。)中的记录进行修改。要求按指
19、定的姓名要求按指定的姓名,性别性别,专业班级,学号字段顺序显示。专业班级,学号字段顺序显示。 USE dab BROWSE FIELDS 姓名姓名,性别性别,专业班级专业班级,学号学号 显示结果如下图所示。显示结果如下图所示。v 【例【例4.7】 用用Replace命令对学生档案表(命令对学生档案表(dab.dbf)进行如下)进行如下操作操作:将机械制造将机械制造4班所有同学的班所有同学的“专业班级专业班级”字段的数据清空。字段的数据清空。 USE dab Replace ALL 专业班级专业班级 WITH for 专业班级专业班级=机械制造机械制造4班班 LIST4.3.2 插入记录前面介绍
20、的APPEND命令是将记录追加到数据表末尾,如果想在两条记录之间插入记录,只能在命令窗口中用插入记录命令来实现。命令格式:命令格式:INSERT BLANK BEFORE功能:功能:在当前记录之后或之前插入一条记录。说明:说明: BLANK:表示插入一条空白记录,无此选项时,进入全屏幕编辑状态。 BEFORE:表示在当前记录之前插入,否则在当前记录之后插入。v 【例4.8】 在学生档案表(dab.dbf)中,要求在3号与4号记录之间插入1条空白记录。在命令窗口中输入如下命令: use dab go 4 insert blank before4.3.3记录的删除与恢复在VFP中,删除记录是经过两
21、步完成的。第一步是给要删除的记录加上删除标记,称为逻辑删除,作了逻辑删除标记的记录并没有真正从数据表中删除,以后还可以恢复;如果要真正删除表中的记录,应执行第二步,删除带有删除标记的记录,称为物理删除。1)记录的逻辑删除(1)使用菜单命令对记录作逻辑删除标记(2)用命令对记录作逻辑删除命令格式:命令格式:DELETE 范围 FOR|WHILE 功能:功能:对当前数据表中在指定范围内满足条件的记录作逻辑删除。若缺省范围和FOR| WHILE 选项,则只对当前记录作逻辑删除。v【例4.10】对学生档案表(dab.dbf)中的记录作如下操作:v 对姓名为“那措央中”的记录作逻辑删除。命令序列为: U
22、SE dab DELE FOR 姓名=那措央中 LIST & 查看删除效果 USE &关闭表v对学生档案表(dab.dbf)中专业班级是“计算机1班”和“机械制造4班”的所有记录作逻辑删除。命令序列为: USE dab DELE FOR 专业班级=计算机1班 OR 专业班级=机械制造4班 ALL LIST & 查看删除效果 USE 2)记录的恢复)记录的恢复(1)使用菜单命令取消逻辑删除标记(2)使用命令取消逻辑删除标记命令格式:命令格式:RECALL 范围FOR 功能:功能:恢复数据表中指定范围内满足条件的已有逻辑删除标记的记录。3)记录的物理删除前面介绍的删除记录只是为记录加上一删除标记(
23、即逻辑删除),并未真正从数据表中删除该记录。如果要将这些记录真正从数据表中删除就称为物理删除。(1)使用菜单命令删除作了逻辑删除标记的记录(2)使用命令删除作了逻辑删除标记的记录命令格式:命令格式:PACK MEMO DBF功能:功能:从当前表中永久删除作了逻辑删除标记的记录,减少与该表相关的备注文件所占用的空间,即物理删除。4)清空数据表命令命令格式:命令格式:ZAP功能:功能:从表中删除所有记录,只保留表的结构。说明:说明: ZAP 命令等价于 DELETE ALL 和 PACK 联用,但 ZAP 速度更快。 如果 SET SAFETY 为 ON,VFP 会提示是否要从当前表中删除记录。
24、发出 ZAP 命令,不会引发删除触发器。有关为表创建触发器的详细内容,将在后面介绍。4.3.4 表的复制表的复制1)表结构的复制命令格式:命令格式:COPY STRUCTURE TO FIELDS 功能:功能:将当前数据表的结构复制到指定的数据表文件中去,新表的字段数和字段顺序由“FIELDS ”子句决定。2)表记录的复制命令格式:命令格式: COPY TO FIELDS FOR|WHILE 功能:功能:将当前表中在指定范围内满足条件的记录,按指定的字段复制生成一新表文件。4.3.4 表的复制表的复制v 【例【例4.14】 把学生档案表把学生档案表(dab.dbf)中的学号、姓名、性别、专中的
25、学号、姓名、性别、专业班级字段复制成一个新表业班级字段复制成一个新表XSXX.DBF,新表中只包含结构定义,新表中只包含结构定义,而不包含记录数据。命令序列为而不包含记录数据。命令序列为: USE dab COPY STRU TO XSXX FIEL 学号学号,姓名姓名,性别性别,专业班级专业班级 USE XSXX &打开打开XSXX表表 LIST STRU &显示显示XSXX表的结构表的结构4.3.4 表的复制表的复制v 【例【例4.15】 将将dab表中专业班级为表中专业班级为“计算机计算机1班班”的所有学生的记录的所有学生的记录按学号、姓名、性别、专业班级字段顺序复制到一新数据表文件按学
26、号、姓名、性别、专业班级字段顺序复制到一新数据表文件xsda.DBF中。中。 USE dab COPY TO xsda FOR 专业班级专业班级=计算机计算机1班班 FIELDS 学号学号,姓名姓名,性别性别,专业班级专业班级 USE xsda Browv 新表新表xsda.dbf中的记录数如下图所示。中的记录数如下图所示。4.4 数据表的排序、索引与查询数据表的排序、索引与查询4.4.1 数据表的分类排序(物理排序)排序是指根据数据表文件中某个或多个字段(称为关键字段)的值将表中的记录重新排列生成一个新的数据表文件。排序命令为:命令格式:命令格式:SORT TO ON /A/D/C,/A/D
27、/C ASCENDING|DESCENDING范围FIELDSFOR|WHILE 功能:功能:将当前数据表中指定范围内满足条件的记录,按字段名1、字段名2等关键字段的值的大小重新排列,并将排序结果放到指定的新表文件中。说明:说明: 排序的结果放入由“”指定的表中,产生的新表是关闭的。 排序字段可以是字符型、数字型、日期型、逻辑型等字段,不能是备注型和通用型字段。 A表示按字段值升序排序,为缺省方式;D表示按字段值降序排序;C对于字符型字段不区分大小写字母。 ASCENDINGDESCENDING决定除用/A或/D指明了排序方式的字段外的所有字段的排序方式,前者为升序,后者为降序。 缺省“范围”
28、和“FOR|WHILE ”时,则对当前表中的所有记录排序。4.4 数据表的排序、索引与查询数据表的排序、索引与查询v 【例4.16】对数据表文件dab.dbf中的记录按下列要求排序:v 将数据表文件dab.dbf中的记录按“出生日期”升序排列。排序后的文件名为dab_sor1.dbf,命令序列如下 USE dab SORT TO dab_sor1 ON 出生日期/A USE dab_sor1 &打开生成的新表文件 BROWSEv 排序后dab_sor1.dbf表中的记录顺序如下图所示。4.4 数据表的排序、索引与查询数据表的排序、索引与查询v 将数据表文件dab.dbf中的记录按“专业班级”升
29、序排列,专业班级相同时按“出生日期”降序排列,排序后的文件名为dab_sor2.dbf。命令序列如下 USE dab SORT TO dab_SOR2 ON 专业班级/A,出生日期/D USE dab_SOR2 &打开生成的新表文件 BROWSEv 排序后dab_SOR2.dbf表中的记录顺序如图4.21所示。 4.4.2数据表索引的概念1)索引的概念 所谓索引,是指对表中的有关记录按指定的索引关键字表达式的值进行排列,并生成一个相应的索引文件或索引标识(该索引标识也包含在索引文件中)。建立索引就是建立一个由指定索引字段的值和它对应的记录号组成的索引表,即索引文件。 索引文件中建立了索引字段值
30、与记录号的对应关系。因此索引字段值的顺序实际上是表文件某种逻辑顺序的映射,而表文件的物理顺序并没有改变。一个表文件可以建立多个索引,在操作中可以同时打开多个索引,但是任何时候只有一个索引起作用,索引文件依赖于表文件而存在。 索引具有自动更新的特性,即当索引被打开后,在对表进行记录的添加、删除、修改时,相应的索引会自动进行更新。2)索引的类型根据索引功能的不同,可将索引分为下列4种类型。(1)主索引: 主索引是一种只能在数据库表中而不能在自由表中建立的索引。在指定的字段或表达式中,主索引的关键字绝对不允许有重复值。主索引主要用来在永久关系中的父表与子表之间建立参照完整性设置。一个表只能创建一个主
31、索引。如果在任何已经包含了重复数据的字段中指定主索引,VFP将产生错误信息。(2)候选索引: 和主索引类似,它的值也不允许在指定的字段或表达式中重复。候选一词是指索引的状态。因为候选索引禁止重复值,因此它们在表中有资格被选做主索引,即主索引的候选,一个表中可以有多个候选索引。(3)惟一索引: 惟一索引允许索引关键字在表中的记录有重复的值。但在创建的索引文件里不允许包含有索引关键字的重复值,若表有重复的字段值,索引文件只保留该关键字段值前面的第一条记录。(4)普通索引3)索引文件的种类(1) 单索引文件(独立索引文件)该索引文件中只包含一个索引,索引文件的扩展名为.idx。使用时必须先打开。(2
32、)非结构复合索引文件该索引文件可以包含不同索引标识的多个索引,也可以为一个表建立多个非结构复合索引文件。非结构复合索引文件的文件名由用户指定,扩展名为.cdx。使用时必须打开。(3) 结构复合索引文件该索引文件可以包含不同索引标识的多个索引。一个表只有一个结构复合索引文件,其索引文件名与表名同名,扩展名为.cdx。结构复合索引文件随表的打开而打开,随表的修改而更新。在VFP中,主要使用结构复合索引文件。443 索引的建立1)建立单索引文件命令格式:命令格式: INDEX ON TO FOR|WHILE ADDITIVE功能:功能:根据的值建立一个索引文件,其扩展名为.IDX。 说明:说明: 只
33、能是字符型、数字型、日期型和逻辑型数据。 可以是表中的一个字段或多个字段组成的表达式,当表达式中各字段的数据类型不同时,必须转换为相同的数据类型,且必须转换成字符型。 FOR|WHILE 选项是只对满足条件的记录建立索引文件。 若选择了ADDITIVE可选项,则执行该命令前不关闭已打开的索引文件;否则,将关闭已打开的索引文件。 单索引文件只能按的值升序排列。v 【例4.17】 对dab.dbf数据表按“性别”字段升序建立单索引文件。索引文件名为xbsy,命令序列为: USE dab INDEX ON 性别 TO xbsy listv 用list命令查看表中的记录顺序如下图所示。可以看出使用索引
34、对于表中记录的物理顺序并没有改变,因为相应记录的记录号并没有因为建立索引而改变,只是输出记录的顺序改变了。v 【例4.18】 对dab.dbf数据表按“专业班级”升序,专业班级相同时按“出生日期”升序建立单索引文件。索引文件名为 zysy,命令序列为: USE dab INDEX ON 专业班级+dtoc(出生日期) to zysy Listv 该索引顺序如下图所示。2)建立结构复合索引文件(1)用表设计器建立结构复合索引文件(2)命令方式建立结构复合索引文件命令格式:命令格式:INDEX ON TAG FOR|WHILE ASCENDING|DESCENDING说明:说明:第一次建立索引时,
35、将产生一个与数据表同名而其扩展名为.CDX的结构复合索引文件。结构一词是指:VFP把该文件当作表的固有部分来处理,并在使用表时自动打开。如果结构复合索引文件丢失了,数据表文件就不能打开。结构复合索引文件一旦建立,将随着数据表文件的打开而同时自动打开,但对记录的操作顺序不影响。“索引标识名”作为索引的标识,存放在.CDX文件中。一个.CDX文件可以包含多个标识名,但各标识名应不相同。ASCENDINGDESCENDING指定记录的排序方式,前者为升序,后者为降序。v 【例4.19】对学生档案表(dab.dbf)按“性别”升序排列,性别相同时按“专业班级”建立结构复合索引,其标识名为BJ。 USE
36、 dab INDEX ON 性别+专业班级 TAG BJ listv 显示结果如下图所示。 444 索引的使用1)打开单索引文件或非结构复合索引文件单索引文件在使用时必须先打开。通常使用相应的命令打开索引文件。1打开数据表的同时打开索引文件命令格式:命令格式:USE INDEX 功能:功能:在打开指定表的同时打开与其相关的一个或多个索引文件。2 索引文件的单独打开如果一个表建立了多个单索引文件,要使用这些索引文件,可以用下列命令打开这些索引文件。命令格式:命令格式:SET INDEX TO ADDITIVE功能:功能:为当前表打开指定的一个或多个索引文件2) 关闭索引文件索引文件使用完后应关闭
37、。由于索引文件是依赖于数据表而存在的,所以关闭数据表文件时,索引文件也将关闭。另外,专门关闭索引文件的命令有:SET INDEX TO 功能:功能:关闭当前工作区中打开的索引文件。CLOSE INDEX功能:功能:关闭所有工作区中打开的索引文件3)设置主控索引当打开了多个独立索引文件或结构复合索引文件中包含多个索引标识时,需要指定当前起作用的索引。命令格式:命令格式:SET ORDER TO |TAG 功能:功能:指定相应的索引为主控索引。v4)删除索引标识 v命令格式命令格式:vDELETE TAG ALL | ,v功能:功能:删除打开的复合索引文件的索引标识。v说明:说明:vALL子句用于
38、删除复合索引文件的所有索引标识。若某索引文件的所有索引标识都被删除,则该索引文件也自动删除。v该命令只能删除打开的复合索引文件的索引标识,对于单索引文件不能用该命令。 445 数据表的查询数据表的查询 表中记录的查询就是在表的所有记录中查找满足条件的记录,并把记录指针定位在要查询的记录上。这里我们介绍两种传统查询方法:顺序查询和索引查询。1)顺序查询顺序查询是一种按照记录的排列顺序,在表文件中逐个地查找满足条件的记录,查询速度较慢。1LOCATE命令命令格式:命令格式: LOCATE 范围 FOR|WHILE 功能:功能:按顺序搜索数据表,并将记录指针定位在满足条件的第一条记录2CONTINU
39、E命令 命令格式:命令格式: CONTINUE 功能:功能:LOCATE命令执行后继续移动记录指针到下一条满足条件的记录。 445 数据表的查询数据表的查询v 【例4.23】在学生档案表(dab.dbf)中找出计算机1班的前两位同学,并将记录输出。 USE dab LOCATE ALL FOR 专业班级=计算机1班 ? FOUND() & 结果为.T. DISPLAY CONTINUE & 查找满足条件的下一记录 ? FOUND() DISPLAY USE2)索引查询索引查询是在数据表文件建立了索引的基础上进行的,因此必须打开相应的索引文件。打开索引后,记录将按索引关键字值升序或降序排列,查询
40、的速度比顺序查询要快得多。(1)FIND命令命令命令格式:命令格式:FIND| | 功能:功能:在索引文件中查找索引关键字值与指定的字符串或数值常数相等的记录。(2)SEEK命令命令命令格式:命令格式:SEEK 功能:功能:在索引文件中查找索引关键字值与指定表达式值相等的记录。 v 【例4.24】 使用FIND命令和SEEK命令在学生档案表(dab.dbf)中按如下要求分别查找满足条件的第一条记录。v 查找姓名为“那措央中”的记录;v 查找1987年出生的男生记录。 USE dab INDEX ON 姓名 TAG XMSY FIND 那措央中 &或 SEEK 那措央中 DISPLAY INDE
41、X ON 性别+righ(dtoc(出生日期),2) TAG xbrq SEEK 男+87 & 按表达式的值查找 ?FOUND() & 根据FOUND()的值判断查找结果4.5 数据表的统计运算数据表的统计运算 1)统计记录个数命令格式:命令格式:COUNT 范围FOR|WHILE TO 功能:功能:统计当前数据表中指定范围内满足条件的记录个数。2)数值字段求和命令格式命令格式:SUM 范围FOR|WHILE TO 功能功能: 对当前表的指定数值型字段或全部数值型字段在列方向上求和。3)数值字段求平均值命令格式:命令格式: AVERAGE 范围FOR|WHILE TO 功能:功能:对当前表中的
42、数值字段在列方向上求平均值。各选项的含义与SUM命令相同。4)多功能计算命令命令格式:命令格式:CALCULATE 范围FOR|WHILE TO 功能:功能:对表中的字段或包含字段的表达式作统计计算。可以是下列函数的任意组合, 这些函数仅用于 CALCULATE 命令。5)分类汇总命令格式:命令格式: TOTAL TO ON 范围 FIELDS FOR|WHILE 功能:功能:对数值型字段按指定的关键字段进行分类求和,结果存入指定的汇总表文件中。46 数组与表中记录间的数据交换数组与表中记录间的数据交换461 数据表的当前记录值传送到数组命令格式:命令格式: SCATTER FIELDS TO
43、 BLANK|MEMVARBLANK MEMO功能:功能:把数据表文件当前记录中的数据传送到数组或一组内存变量中。462 数组中的数据传送到数据表的当前记录 命令格式:命令格式: GATHER FROM |MEMVAR FIELDS MEMO 功能:功能:把数组或内存变量中的数据传送到当前表的当前记录中46 数组与表中记录间的数据交换数组与表中记录间的数据交换v 【例【例4.30】使用】使用SCATTER命令将学生档案表中当前记录各字段的值分别传送命令将学生档案表中当前记录各字段的值分别传送到到stu数组和一组变量中。数组和一组变量中。 dimension stu(7) & 定义一个数组,该数
44、组有定义一个数组,该数组有7个数组元素个数组元素 USE dab Go 3 & 设置当前记录设置当前记录 scatter to stu memo & 把当前记录各字段的值传送到数组中把当前记录各字段的值传送到数组中 ?stu(1),stu(2) ,stu(3),stu(4),stu(5),stu(6),stu(7) &显示数组元素的值显示数组元素的值 scatter memvar & 把当前记录各字段的值传送到内存变量中把当前记录各字段的值传送到内存变量中 ? m.学号学号,m.姓名姓名,m.性别性别 & 显示部分内存变量的值显示部分内存变量的值4.7 工作区与多表操作 1. 工作区的概念工作
45、区的概念 在VF中,每个工作区最多只能打开一个表文件,用USE命令打开一个新的表,同时也就关闭了前面已打开的表。系统默认的总是第1个工作区。任何时间只有一个工作区是当前工作区,其中打开的表是当前表。在实际应用中,用户常常需要同时打开多个表文件,以便对多个表文件的数据进行操作。为了解决这一问题,Visual FoxPro引入了工作区的概念。在一个工作区中只能打开一个表,一个表也不能同时在多个工作区打开。如在同一时刻要打开多个表,就需要在不同的工作区中打开不同的表.建立表间的临时关系有以下几种方式。v(1)一对一的关系:作为关联字段的字段值,父表和子表都没有重复值。当父表指针移动时,父表的一条记录
46、与子表的一条记录相关联。v(2)一对多的关系:作为关联字段的字段值,父表没有重复值,子表有重复值。父表的一条记录与子表的多条记录相关联。v(3)多对一的关系:作为关联字段的字段值,子表没有重复值,父表有重复值。父表有多条记录与子表的一条记录对应,但子表的一条记录只能和父表的一条记录相关联。v(4)多对多的关系:父表的多条记录与子表的多条记录相关联。在VFP中,不能直接处理多对多关系。2工作区和当前工作区工作区和当前工作区 Visual FoxPro 能同时提供32767个工作区。系统默认值为1区。 在任意时刻,只有一个工作区是当前工作区,用户只能在当前工作区对打开的当前表进行操作。 在Visu
47、al FoxPro中一次可以打开多个数据库,在每个数据库中都可打开多个表,也可打开多个自由表。 同一个数据库文件不允许同时在多个工作区打开,但在其它工作区中被关闭之后,可以在任意一个工作区中被打开。3选择当前工作区选择当前工作区 每一个工作区用工作区号或别名来标识(1)工作区号 利用数字132767来标识32767个不同的工作区(2)工作区别名 110工作区用AJ这10个字母来标识。 11-32767工作区用w11w32767来标识。 或工作区当前打开的表的表名也可用来标识该工作区 0表示编号最小的可用空闲工作区 use 表名 in 工作区号 use 表名 in 工作区号 alias 别名测试
48、当前工作区号的函数: select()(3)工作区的选择 当系统启动时,1号工作区是当前工作区,若想改变当前工作区,则可使用SELECT命令来转换当前工作区。【命令格式】:SELECT /【功能】:选择一个工作区作为当前工作区。【说明】: | :指定当前工作区。选择工作区时,可以直接指定区号,也可以通过别名指定工作区,二者是等效的。 别名可以是系统规定的别名,也可以是用户规定的别名,甚至可以用已打开的表名替代工作区别名。此命令允许选用“0”号工作区。如果指定“0”,则表示选用当前未使用过的编号最小的工作区作为当前工作区。5. 5. 表的关联表的关联( (表之间的临时联系表之间的临时联系) )
49、所谓表文件的关联是把当前工作区中打开的表与另一个工作区中打开的表进行逻辑连接,而不生成新的表。当前工作区的表和另一工作区中的打开表建立关联后,当前工作区是表的记录指针移动时,被关联工作区的表记录指针也将自动相应移动,以实现对多个表的同时操作。 在多个表中,必须有一个表为关联表,此表常称为父表,而其他的表则称为被关联表,常称为子表。在两个表之间建立关联,必须以某一个公共字段为标准,该字段称为关键字段。表文件的关联可分为一对一关联、一对多关联和多对多关联。 永久联系在每次使用表时不需要重新建立,但它不能控制不同工作区中记录指针的联动(同步移动).1)使用命令建立关联v 命令格式:命令格式:v SE
50、T RELATION TO INTO , INTO ADDITIVEv 功能:功能:以当前表为父表与一个或多个工作区的子表建立关联。2)使用“数据工作期”建立关联v 在数据工作期窗口建立表间关联的操作步骤为:v 打开【窗口】菜单,选择【数据工作期】命令调出【数据工作期】窗口;v 在【数据工作期】窗口中打开需要关联的多个表;v 选择进行关联的“父表”,并单击【关系】按钮;v 选择“子表”,并建立关联条件;v 如果此关联为一对多的关联,则需单击【一对多】按钮进行设置。v 【例【例4.33】根据学生管理系统的学生档案表(】根据学生管理系统的学生档案表(dab.dbf)、选课成绩表()、选课成绩表(x