第四章--数据库的设计与操作-Visual-FoxPro程序设计-教材课件.ppt
-
资源ID:91535740
资源大小:2.47MB
全文页数:73页
- 资源格式: PPT
下载积分:12金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
第四章--数据库的设计与操作-Visual-FoxPro程序设计-教材课件.ppt
第四章第四章 数据库的设计与操作数据库的设计与操作本章主要内容:4.1概述4.2数据表的创建4.3数据表的操作4.4表的排序、索引与查询4.5数据表的统计与运算4.6多表操作4.7数据库及其基本操作4.1 概述概述4.1.1 基本概念基本概念Visual FoxPro的数据库是一个逻辑概念,主要用来组织和联系表。它是一个容器或框架,可以存放一系列数据库对象,如表、视图等。表是关系数据库管理系统中处理数据的基本单元,扩展名为.DBF。表是Visual FoxPro存储数据的文件。可分为数据库表和自由表两种,数据库表具有一系列优点。如:可以使用长表名和长字段名;可以为字段指定标题和添加注释;可以为字段指定默认值和输入掩码;可以规定字段级规则和记录级规则;支持主关键字、参照完整性和表之间的联系,支持SQL的insert、update 和delete 事件的触发器定义。4.2 数据表的创建 4.2.1 数据表的创建 1创建表结构1)启动表设计器(1)菜单方式单击“文件”|“新建”,选择“文件类型”为表,再单击“新建文件”后,在出现的“创建”对话框里给新建的表确定保存路径、文件名和类型,单击“保存”按钮,即可打开表设计器如图4-3所示。图4-32输入记录数据表结构创建好后,就可以向数据表中输入记录。VFP提供了立即输入方式和追加输入方式。1)立即输入方式当表结构设计完成,就输入记录数据,即为立即输入记录方式。输入完成后,可单击窗口关闭按钮或使用Ctrl+W/Ctrl+End组合键自动保存输入数据,按Esc键放弃存盘并退出输入窗口。2)追加输入方式在已经存在的表的末尾追加记录,需要先打开数据表,可以用菜单方式和命令方式实现。(1)在数据表处于浏览状态下,单击“显示”菜单下的“追加方式”,如图4-8所示,用户即可输入记录数据。(2)在命令窗口输入:APPENDBLANK说明:省略BLANK选项,则进入全屏幕编辑窗口,在该窗口可以输入多条记录;若有BLANK,则直接在数据表末尾增加一条空白记录,不进入全屏幕编辑窗口。图4-84.3 数据表的操作 4.3.1 打开与关闭表打开与关闭表1表的打开1)菜单方式单击“文件”|“打开”,在弹出的“打开”对话框中,“文件类型”列表中选择“表(*.dbf)”,再选定要打开的表文件,单击“确定”即打开了选定的表文件,就可以对其进行相应操作,如浏览、修改等。2)命令方式格式:USE IN 工作区号Alias 说明:USE命令的用法相当灵活,这里给出的仅是USE命令的一种基本形式,一个工作区同时只能打开一个表,所以使用USE命令在一个工作区打开一表文件,该工作区中先前打开的表自动关闭。工作区与别名的概念参看4.7如果表中含有备注型字段,则打开表时,相应的备注文件(FPT)同时打开。刚建立的表自动处于打开状态,不需再用USE命令打开。USE xsda.dbf&打开表文件时,扩展名可以缺省4.3.2 修改表结构修改表结构格式:MODIFY STRUCTURE 该命令启动当前所打开的表的设计器,以便修改其结构。说明:修改表结构包括添加和删除字段,修改字段名称、大小和数据类型,添加、删除或修改索引等。在更改表结构之前,系统会自动备份当前表。修改完成之后,将备份表中包含的数据追加到新修改后的表结构中。如果表中有备注类型字段,还将创建一个备注备份文件。表备份文件的扩展名为.BAK,备注备份文件的扩展名为.TBK。如果使用MODIFY STRUCTURE修改结构出现问题,可以删除新文件,把.BAK和.TBK改为原文件扩展名(.DBF和.FPT)即可恢复原文件。4.3.3 浏览表中记录浏览表中记录数据表建立好后,需要显示(查看)数据表中的内容,显示数据表中记录有下列方式。l)菜单方式单击“文件”|“打开”命令,打开要浏览显示的数据表。单击“显示”|“浏览”命令。数据表中的记录便显示在浏览窗口上。也可在打开表之后,单击“显示”|“编辑”,此时,数据表的内容以编辑方式显示。浏览和编辑显示数据表中的记录时,属于全屏幕编辑操作,用户可以任意移动光标到需要的记录、字段上,并可直接对记录数据进行修改,也可向表中追加新记录。4.3.4 记录指针的定位记录指针的定位1记录指针的概念采用命令方式对表中记录进行编辑(增加、删除、修改)时,必须先打开相应的数据表,并定位到相应记录上,才能对该记录进行编辑操作。VFP中,对任何打开的数据表文件,都提供了一个记录指针,用于完成记录的定位。记录指钍指向的记录称为当前记录。对表中记录的操作一般都是针对当前记录进行的。刚打开的数据表,记录指针总是指向第一条记录,但对数据表的操作将改变录指针的位置,可以用.BOF()和.EOF()函数来测试,根据函数的返回值“.T.”或“F”判断记录指针的位置。2记录指针的定位建立数据表时,每条记录都有一个编号,称为记录号,记录号依据输入记录的顺序从1开始依次编号。对记录指针的定位,实际上就是将记录指针移到指定的记录号上。方法有菜单操作方式和命令操作方式2种。4.3.4 记录指针的定位记录指针的定位2.命令操作方式1)绝对移动格式:GOTO|TOP|BOTTOM功能:将记录指针定位到指定的记录上。说明:的值指明记录号,即直接按给定的记录号定位。选择TOP或BOTTOM则分别将记录指针定位到表文件的首、尾记录上。例4.3 用GO命令移动学生档案表(xsdab.dbf)中的记录指针。在命令窗口输入如下命令序列:USE xsdaGO 6&记录指针指向记录号为6的记录GO TOP&记录指针指向首记录GO BOTTOM&记录指针指向尾记录USE2)相对移动格式:SKIP功能:以当前记录为基准向前或向后移动记录指针。说明:的值指明记录指针移动的相对记录数。如果是负数,表示记录指针向着记录号减小的方向(向前)移动;如果是正数,则向着记录号增大的方向(向后)移动。缺省,则记录指针向后移动1条记录。3用REPLACE命令修改记录格式:REPLACE 范围 WITH ADDITIVE,WITH ADDITIVEFOR|WHILE 功能:成批修改表的记录数据。说明:该命令不进入全屏幕编辑状态。缺省范围和FOR|WHILE时,只对当前记录进行修改。命令中必须要有一个修改的字段名,否则无效。该命令是唯一的能用表达式修改记录数据的命令,而且具有计算功能,是程序方式中最常用的修改记录字段值的方法。对于数值型字段,当表达式的值超过字段的宽度时,将按如下规则进行替换:首先截去小部分,并对小数部分进行四舍五人;如果还放不下,则用科学计数法表示,并提示“数值上溢,数据已丢失。”;如果还是放不下,则用“*”填充该字段,数据丢失。对于字符型字段,当表达式的值超过字段的宽度时,则截去后面多余字符。ADDITIVE只对替换备注字段有用,可把对备注字段的替代内容追加到备注字段的后面。如果省略ADDITIVE,则用表达式的值改写备注字段原有内容。4.3.6 插入记录插入记录APPEND命令只能将记录追加到数据表末尾,如果想在两条记录之间插入记录,则需要在命令窗口中用插人记录命令来实现。格式:INSERT BLANK BEFORE功能:在当前记录之后或之前插人一条记录。说明:BLANK:表示插入一条空白记录,缺省此项时,进入全屏幕编辑状态。BEFORE:表示在当前记录之前插入,缺省此项则在当前记录之后插入。例4.7 在学生档案表(xsda.dbf)中,要求在5号与6号记录之间插入1条空白记录。在命令窗口中输入如下命令:USE xsdaGO 5INSERT BLANK 表示在5号记录之后插入了一条空白记录,其记录号为6,原表中之后记录的记录号均依次增加1。4.3.7 记录的删除与恢复记录的删除与恢复VFP中,删除记录是经过两步完成的。第l步是给要删除的记录加上删除标记,称为逻辑删除,做了逻辑删除的记录并没有真正从数据表中删除,以后还可以恢复;要真正删除表中的记录,则执行第2步,删除带有删除标记的记录,称为物理删除。1逻辑删除1)菜单方式打开要操作的数据表,用浏览或编辑方式显示该数据表中的记录;再用鼠标单击记录左边的逻辑删除标记块,标记块变成黑色,代表此记录已做了逻辑删除标记,如图4-16所示,有3条记录已做了逻辑删除。图4-16 逻辑删除记录2)命令方式格式:DELETE 范围 FOR|WHILE功能:对当前数据表中在指定范围内满足条件的记录作逻辑删除。若缺省范围和FOR|WHILE选项,则只对当前记录作逻辑删除。例4.8 4.3.7 记录的删除与恢复记录的删除与恢复2记录的恢复对作了逻辑删除的记录取消其逻辑删除标记称为记录的恢复。菜单方式可在浏览或编辑窗口中通过单击鼠标,一条一条地恢复删除的记录。命令方式格式:RECALL 范围FOR 功能:恢复数据表中指定范围内满足条件的已有逻辑删除标记的记录,缺省范围和FOR,则对当前记录取消其逻辑删除标记。例4.9 恢复学生档案表(xsda.dbf)中所有作了逻辑删除的记录。命令序列为:USE xsdaRECALL ALL LISTUSE 命令方式格式:PACK MEMO DBF功能:从当前表中永久删除作了逻辑删除标记的记录,减少与该表相关的备注文件所占用的空间,即物理删除。说明:MEMO子句:从备注文件中删除未使用空间,但不从表中删除标有删除标记录。备注字段的信息保存在一个相关的备注文件内。备注文件的文件名与表相同,扩展名为FPT。DBF子句:从表中删除带删除标标记的记录,但不影响备注文件。当使用PACK命令时,VFP把所有没作删除标记的记录录复制到一个临时表(Temporary Table)执行完PACK命令后,再把原表从磁盘上删除,同时用原表名命名临时表。例4.10 4.3.7 记录的删除与恢复记录的删除与恢复4清空数据表命令格式:ZAP功能:删除表中所有记录,只保留表的结构。说明:ZAP命令等同DELETE ALL和PACK联用,但ZAP速度更快。如果SET SAFETY为ON,VFP会提示是否要从当前表中删除记录。发出ZAP命令,不会引发删除触发器。有关为表创建触发器的详细内,将在后面介绍。例4.11 删除xsda.dbf数据表文件中的全部记录。USE xsdaZAP数据表xsda.dbf中所有记录被彻底删除,记录数为0,但该数据表的结构仍存在。4.3.8 表的复制表的复制1.表结构的复制格式:COPY STRUCTURE TO FIELDS功能:将当前数据表的结构复制到指定的数据表文件中,新表的字段数和字段顺序由“FIELDS”子句决定。例4.12 把学生档案表(xsda.dbf)中的学号、姓名、性别、班级字段复制成一个新表XS.DBF,新表中只有结构定义,没有记录数据。命令序列为:USE xsdaCOPY STRU TO XS FIEL学号,姓名,性别,班级USE XS&打开XS表LIST STRU&显示XS表结构2.表记录的复制格式:COPY TOFIELDS FOR|WHILE 功能:将当前表中在指定范围内满足条件的记录,按指定的字段复制生成一新表文件。例4.12 4.4.2 数据表索引的概念数据表索引的概念1.索引的概念索引是对数据表中某一关键字段或表达式的值按照一定的规则进行排序,并根据排序的结果建立索引文件。在VFP中,建立索引文件实际上是建立一个由指定索引字段的值和它对应的记录号组成的索引表。用索引进行排序不会改变表中记录的物理顺序,也不会建立一个新表。因此一个表可以拥有多个索引,用户也可以按多种不同的顺序使用表中的记录。但任何时候只有一个索引起作用。索引文件和表文件是分开存储的,但是索引文件不能独立使用,必须与原数据表一起工作。索引具有自动更新的特性,即当索引文件打开后,对表进行记录的添加、删除、修改时,相应的索引会自动进行更新。2.索引的分类根据对索引关键字的不同要求,将索引分为四种类型。主索引在主索引中,用作排序依据的关键字段或表达式中不允许出现重复值。主索引只能在数据表中建立,并且一个数据表只能创建一个主索引。候选索引候选索引也不允许在用作排序依据的关键字段或表达式中出现重复值。它们在表中有资格被选作主索引,即主索引的候选者。一个表中可以有多个候选索引。唯一索引允许在用作排序依据的关键字段或表达式中出现重复值,但在唯一索引中,只包含表中第一个与关键字或表达式相匹配的记录,对于那些具有重复值的记录则不包含在唯一索引中。普通索引是建立索引时的默认类型,可用于记录排序和搜索记录。普通索引允许在用作排序依据的关键字段或表达式中出现重复值,而且一个表中可以建立多个普通索引。4.4.3 索引文件的建立、使用和删除索引文件的建立、使用和删除1建立索引文件1)建立单索引文件格式:INDEX ON TO FOR|WHILEADDITIVE 功能:根据的值建立一个索引文件,其扩展名为.idx。说明:只能是字符型、数值型、日期型和逻辑型数据。可以是表中的一个字段或多个字段组成的表达式,当表达式中各字段的数据类型不同时,必须转换为相同的数据类型,且必须转换成字符型。FOR|WHILE 指定对满足条件的记录建立索引文件。若选择了ADDITIVE可选项,则执行该命令前不关闭已打开的索引文件;否则,将关闭已打开的索引文件。单索引文件只能按的值升序排列。例4.14 4.4.3 索引文件的建立、使用和删除索引文件的建立、使用和删除2)建立结构复合索引文件(1)用表设计器建立结构复合索引文件在表设计器中,只要设置了索引就自动创建了结构复合索引文件。建立结构复合索引文件的方法如下:打开数据表,然后打开表设计器。选择字段选项卡,在需要设置索引的字段右边对应的索引下拉列表中选择升序或降序,建立的索引为单个字段的普通索引。选择索引选项卡,则可建立主索引、候选索引、唯一索引、普通索引4种类型的结构复合索引文件。具体步骤如下:在索引名框中,输入索引标识名。在类型下拉列表框中,选择索引类型。在表达式框中输入用于索引的字段名。或单击表达式框右边的按钮启动表达式生成器来建立索引表达式。如果要对满足条件的记录索引,可在筛选框中输入筛选表达式。如果要使用降序排序,单击位于索引名左边的升、降序按钮。默认顺序为升序。单击确定按钮,在弹出的提示对话框中单击是按钮。说明:上述方法建立的索引为结构复合索引,结构复合索引文件名与表文件同名,而扩展名为.cdx。4.4.3 索引文件的建立、使用和删除索引文件的建立、使用和删除2.命令方式建立结构复合索引文件格式:INDEX ON TAG FOR|WHIIE ASCENDING|DESCENDING说明:第一次建立索引时,将生成一个与数据表文件同名而扩展名为cdx的结构复合索引文件。结构的含义:VFP把该文件当作表的组成部分来处理,当表文件打开时就自动打开,如果结构复合索引文件丢失或损坏,则数据表文件也不能打开。“索引标识名”作为索引的标识,存放在cdx文件中。一个cdx文件可以包含多个各不相同的标识名。“ASCENDING|DESCENDING”用来指定索引排序方式,前者为升序,后者为降序。该命令建立的是普通索引。例4.16 对奖学金记录表(jxj.dbf)按“奖学金类型”升序排列,类型相同时按“奖学金 4.4.3 索引文件的建立、使用和删除索引文件的建立、使用和删除3)非结构复合索引文件格式:INDEX ON TAG OF FOR ASCENDING|DESCENDING说明:非结构复合索引文件与结构复合索引文件的区别是,在建立时要由用户给出复合索引文件名,并且它不随数据表文件的打开而自动打开,也不影响数据表的打开。4.4.3 索引文件的建立、使用和删除索引文件的建立、使用和删除2索引的使用索引提供对数据的快速访问,使用索引能够提高数据查询的性能。要实现索引查询,表和相应的索引文件必须要打开,还要确定相应的主控索引文件。若主控索引文件为结构复合索引文件,还必须进一步指定主控索引标识。一个表可以同时打开多个索引,但任何时刻只能有一个索引起作用。所谓主控索引文件,是指同时打开的多个索引文件中当前正起作用的索引文件,所谓主控索引标识,是结构复合索引文件所包含的多个索引标识中当前正起作用的索引标识。通常情况下,将主索引文件或主控索引标识简称为主控索引。打开单索引文件或非结构复合索引文件单索引文件或非结构复合索引文件要使用时,通常使用相应的命令先打开。(1)打开数据表的同时打开索引文件格式:USE INDEX 功能:在打开指定表的同时打开与其相关的1个或多个索引文件。说明:INDEX子句用于指定要打开的索引文件(最多7个)。打开多个索引多件时,索引文件之间用逗号分隔,第1个索引文件自动成为主控索引文件。例4.17 4.4.3 索引文件的建立、使用和删除索引文件的建立、使用和删除(2)索引文件单独打开格式:SET INDEX TO ADDITIVE功能:为当前表打开指定的一个或多个索引文件。说明:索引文件列表用于指定要打开的一个或多个索引文件(最多7个),索引文件列表中,第1个索引文件将自动成为主控索引文件。若无 ADDITIVE,则随着新索引文件的打开,以前打开的索引文件会自动关闭。2)关闭索引文件索引文件使用完后应关闭。由于索引文件是依赖于数据表而存在的,所以关闭数据表文件的同时,索引文件也将关闭。另外,单独关闭索引文件的命令有:SET INDEX TO功能:关闭当前工作区中打开的索引文件。CLOSE INDEX功能:关闭所有工作区中打开的索引文件。说明:刚创建的索引处于打开状态,并且自动成为主控索引。结构复合索引文件随表的打开而自动打开。表关闭时,与该表相关的所有打开的索引文件也自动关闭。3)设置主控索引当同时打开了多个独立索引文件或结构复合索引文件中包含多个索引标识时,需要指定当前起作用的索引即主控索引。格式:SET ORDER TO|TAG 功能:指定相应的索引为主控索引。例4.184.4.3 索引文件的建立、使用和删除索引文件的建立、使用和删除3重建索引如果在索引文件打开状态下,对数据表进行编辑修改时,系统会自动修改索引文件。但是如果在索引文件打开前,对数据表中的索引关键字进行了编辑修改操作,那么索引文件不会自动更新,与表文件内容就不一致了,这时就需要重建索引文件。格式:REINDEX功能:使用当前工作区中打开的索引文件按索引关键字表达式重新建立索引表。4删除索引标识格式:DELETE TAG ALL ,功能:删除打开的复合索引文件的索引标识。说明:ALL子句用于删除复合索引文件的所有索引标识。若某索引文件的所有索引标识都被删除,则该索引文件也自动删除。该命令只能删除打开的复合索引文件的索引标识,对于单索引文件不能使用该命令。4.4.4 数据表的查询数据表的查询在数据处理过程中,进行得最频繁的操作就是从庞大的数据中查找出符合某种条件或要求的记录,即查询操作。VFP中提供了对表记录的两类查询命令:顺序查询和索引查询。1顺序查询顺序查询是一种按照记录的排列顺序,在表文件中从上而下依次查找满足条件的记录。该命令可以在没有打开任何索引文件的无序的表中进行查询操作,但是在数据庞大的表中进行查询时速度慢。1)LOCATE命令格式:LOCATE 范围 FOR|WHILE 功能:在指定范围内,按顺序搜索数据表,并将记录指针定位在满足条件的第一条记录上。2)CONTINUE命令格式:CONTINUE功能:LOCATE命令执行后继续查找下一条满足条件的记录。说明:LOCATE命令在指定范围内查找满足条件的第一条记录,并将该记录置为当前记录。如果找不到符合条件的记录,则显示“已到定位范围末尾”;缺省范围则为ALL。CONTINUE命令不能单独使用,只能放在LOCATE命令后,并可多次使用。若LOCATE找到一条满足条件的记录,可使用RECNO()返回该记录号,且FOUND()函数的返回值为“真”(.T.),EoF()函数的返回值为“假”(.F.)。例4.19 4.4.4 数据表的查询数据表的查询2索引查询1)FIND命令格式:FIND|功能:在表文件和有关索引文件打开的情况下,查找出索引关键字值与所指定的或相匹配的第一条记录。说明:FIND只能查找C、N型数据,字符串常量可省略边界符;字符串变量前面必须使用宏代换函数&。FIND查找到与索引关键字相匹配的记录,则RECNO()返回该记录号;FOUND()返回“真”(.T.);EoF()返回“假”(.F.)。FIND找到的是与查询数据相匹配的第一条记录,没有继续查找命令。如果有多个与关键字匹配的记录,则记录指针定位于其中的第一条记录上。由于已经打开相关索引文件,所以关键字段值相同的记录排列在一起,若查询后续记录,可用SKIP。2)SEEK命令格式:SEEK功能:在表文件和有关索引文件打开的情况下,查找出索引关键字值与所指定的的值相匹配的第一条记录。说明:只能在索引文件打开后使用SEEK命令。SEEK 命令可查找字符型、数值型、日期型、逻辑型表达式的值。SEEK命令中的表达式必须使用相应的边界符,以确定表达式类型,变量不用&函数。如果SEEK找到了与索引关键字相匹配的记录,则RECNO()返回该记录号;FOUND()返回“真”(T);EOF()返回“假”(F)。若找不到相匹配的关键字,则RECNO()返回值为表中记录总数加1。FOUND()返回“假”(.F.);EOF()返回“真”(T)。例4.204.5 数据表的统计与计算数据表的统计与计算1)统计记录个数命令格式:COUNT 范围 FOR|WHILE TO 功能:统计当前数据表中指定范围内满足条件的记录个数:说明:缺省 范围 和 FOR|WHILE ,对当前表中所有记录进行统计。使用TO 可将统计的结果保存到指定的内存变量,否则将统计结果显示在屏幕上。使用SET DELETE OFF,则加删除标记的记录将被统计在内。例4.21 统计学生档案表(xsdadbf)中女生人数,统计结果保存到内存变量x中。命令序列如下:USE xsdaCOUNT FOR性别=“女”TO x?“女生人数有”+ALLTRIM(STR(x).+“人”2)数值字段求和命令格式:SUM 范围FOR|WHILE To功能:将指定范围内满足条件的记录,按指定的各个表达式在列方向上分别求和。说明:指定要求和的一个或多个数值型字段或者字段表达式。如果省略,则对所有数值型字段求和。缺省范围和 FOR|WHILE,则对所有记录求和。若指定,则将求和结果依次存于相对应的内存变量中中,但要注意,中的变量的个数要与中表达式的个数或所有数值型字段个数相等,否则出错。4.5 数据表的统计与计算数据表的统计与计算3)数值字段求平均值命令格式:AVERAGE 范围 FOR|WHILE TO 功能:对当前表中的数值字段在列方向上求平均值。各选项的含义与SUM命令相同。例4.23 对xsjl.dbf表中销售二组的各种商品销售额求平均值,结果保存到指定的内变量中,并显示计算结果。USE xsjlAVERAGE TO a,b,c,d FOR销售小组=“二组”?a,b,c,dUSE 4)多功能计算命令格式:CALCULATE 范围FOR|WHILE T0功能:对表中的字段或包含字段的表达式作统计计算。可以是下列函数的任意组合,这些函数仅用于CALCULATE命令。说明:这里的指具有统计意义的函数。这些函数是:CNT()统计记录总数。SUM()对当前表数值字段求和。AVG()对当前表数值字段求平均值。MAX()对当前表的C、N、D字段求最大值。MIN()对当前表的C、N、D字段求最小值。SUM()、AVG()这样的函数形式只能放在该命令后使用。MAX()、MIN()这样的函数形式放在该命令后是指对当前表字段列方向求最大/小值。例4.24 计算xsjl.dbf表中电视机销售额的最大值、最小值、平均值、总和。4.5 数据表的统计与计算数据表的统计与计算5)分类汇总命令格式:TOTAL TO ON 范围FIELDS FOR|WHILF功能:按关键字段对当前表文件的数值型字段进行分类求和,生成一个新的表文件。说明:当前表必须先按照关键字段进行排序或索引。汇总结果保存在指定的新表文件中,新文件的结构与当前表文件完全相同。FIELDS指定汇总字段,汇总字段必须是数值型字段,若该项缺省则对所有数值型字段求和。范围缺省时是对所有记录进行操作。新文件中的记录个数由决定,汇总时将当前表文件中关键字段值相同的记录分成一类,每一类产生一个记录,各记录中的汇总字段值为汇总后的和,而非汇总字段值为每一类的第一条记录的值。若原表中字段宽度不足容纳汇总结果,则系统将会自动修改新表中该字段的宽度,确保能存放下汇总结果。例4.254.6 多表操作多表操作4.6.1工作区与别名工作区与别名工作区是VFP在内存中开辟的一块区域,用于存放打开的表。表文件使用时要打开,用完要关闭,而且在同一工作区上新打开一个表文件时,原打开的表文件就自动关闭。显然如果数据操作涉及到多个表文件时,这种单工作区方式就不能满足数据处理要求了。VFP系统最多能同时使用32767个工作区,这32767个工作区分别用l-32 767的数字来标识。此外,系统为前10个工作区指定的别名为字母A-J。在任意时刻每个工作区仅能打开一个表文件。在每一个工作区中各有一个记录指针指向该区表文件的当前记录,使得各区的表文件可以独立操作。VFP系统中,虽然可以在不同工作区打开多个表文件,但在任何时刻只能对一个工作区进行操作,这个工作区称为当前工作区或主工作区,又称活动工作区。当前工作区中打开的文件成为当前表文件,又称主表文件。在当前表文件进行操作时,可以引用其他工作区的表文件内容,但不影响其他工作区表文件的数据。若在某工作区打开表时没有指定别名,则该表文件名即为表的别名;若打开表时同时指定了别名,则可以用此别名来引用该表或工作区。打开表时指定别名的方法如下:格式:USE ALIAS 功能:打开一个表文件,并为该表定义一个别名。4.6.2选择当前工作区选择当前工作区只有当前工作区打开的表文件才处于激活状态,系统默认1号工作区为当前工作区。可以根据需要改变当前工作区。当前工作区选择命令格式:SELECT|功能:选择一个工作区为当前工作区。说明:当前工作区的改变不影响各工作区的记录指针位置。指定当前工作区,如果为0,即命令“SELECT 0”表示选择尚未使用的编号最小的工作区为当前工作区。既可以通过工作区号,也可以通过来选择当前工作区。在打开数据表的同时可以选择工作区,但该命令不会改变当前工作区,命令为:USE IN 例4.26 4.6.2选择当前工作区选择当前工作区2)使用“数据工作期”如果用户想了解工作区的使用情况:可以从“窗口”菜单中选择“数据工作期”命令打如图4-25所示的数据工作期窗口。通过该窗口,不仅可以直接查看工作区的使用情况,还能够打开、浏览或关闭指定的表。图4-25 数据工作期窗口注意:可以在命令窗口中输入SET命令来打开数据工作期窗口。3)使用其他工作区的表要使用非当前工作区中打开的表,应使用字段名)-的形式。例4.27 4.6.3 创建表之间的关联创建表之间的关联表间的逻辑连接又称作关联。所谓关联是把2个或多个在不同工作区中打开的表文件根据关键字段进行逻辑连接,而不生成新的表。两个表建立关联后,当前工作区中的表记录指针移动时,被关联工作区的表记录指针也将自动相应移动,以实现对多表的同时操作。通常把发出关联命令工作区的表称为父表或主表,被关联工作区的表称为子表。在两个表之间建立关联,必须以某一个字段为标准,该字段称为关键字段。表文件的关联可分为一对一关联、一对多关联和多对多关联。(1)一对一关联如果A表中的某条记录只能对应B表中的一条记录,而B表中的某一条记录在A表中也只能有一条记录与之对应,则称之为一对一关联。例如在患者信息.DBF中某个患者只能对应床位分配.DBF中的一条记录(一个患者只能拥有一张床),而床位分配.DBF中的某一条记录在患者信息.DBF中也只能有一条记录与之对应(一张床只能住一个患者)。这两个文件之间的关联就是一对一关联。(2)一对多关联如果A表中的某条记录可以对应B表中的多条记录,而B表中的某一条记录在A表中却只能有一条记录与之对应,则称之为一对多关联。例如每个患者只有一条基本信息,但有多次交费的记录,因此同一个住院号在患者信息.DBF中对应一条纪录而在住院费用.DBF中对应多条记录。这两个文件之间的关联就是一对多关联。(3)多对多关联如果A表中的某条记录对应B表中的多条记录,而B表中的某一条记录在A表中也有多条记录与之对应,则称之为多对多的关联。VFP中不能直接处理多对多关联。为了建立这种多对多关联,至少需要3个表。其中一个表作为中间表,将父表与子表关联起来。VFP允许用户在表间建立临时关联和永久关联。4.6.3 创建表之间的关联创建表之间的关联1使用命令建立关联格式:SET RELATION TO INTO ,INTO.ADDITIVE功能:以当前表为父表与一个或多个工作区的子表建立关联。说明:在使用该关联命令之前,各个表文件已分别在各自的工作区打开,当前工作区的表是父表,用表示的表是子表。子表必须先对关联字段索引,父表可不建索引。当父表指针移动时,子表指针按照索引顺序移动到与父表关键字相匹配的第一条记录;若没有匹配的记录,子表指针指向文件尾。是关联的关键字,一般使用表之间具有相同类型和宽度的同名字段,不同名的字段只要类型、宽度以及数值相同也可建立关联。关联后,在父表工作区移动记录指针,带动子表指针作同步移动;而子表的指针移动不会带动父表指针移动。ADDITIVE在建立新的关联后,保留以前的关联,用于3个或3个以上的表之间建立多重关联。关联后,当前工作区的字段名可直接访问,访问其他工作区的字段时,必须在字段名前加上别名。SET SKIP TO在关联命令后使用,建立一对多关联。建立关联是建立表之间的临时关系,当数据表关闭或重新打开时,关联会自动撤消。“SET RELATION TO”命令也可以关闭关联。例4.284.6.3 创建表之间的关联创建表之间的关联2使用数据工作期建立关联在数据工作期窗口建立表间关联的操作步骤如下:单击“窗口”|“数据工作期”命令,弹出“数据工作期”对话框。在“数据工作期”对话框中分别打开需要关联的多个表。选择进行关联的“父表”,并单击“关系”按钮。单击“子表”,并选择关联字段,建立关联。如果此关联为一对多的关联,则需单击“一对多”按钮进行设置。按此方法建立xscj与xsda、kcb和jxj的关联结果如图4-27所示。图4-274.7 数据库及其基本操作数据库及其基本操作4.7.1 数据库的概念数据库的概念1 数据库概念数据库是一个逻辑上的概念和手段,通过一组系统文件将相互关联的数据库表及其相关的数据库对象统一组织和管理。这些对象包括:表、表之间的关系、基于表的视图和查询能及有效管理数据库的存储过程。开发数据库应用系统的首要任务之一就是:设计一个结构合理的数据库。建立数据库后,用户可以在磁盘上看到文件名相同,但扩展名分别为.dbc、.dct 和.dcx的三个文件。数据库也是一种工作环境,一个设计理想的数据库不仅能存储所需要的实体信息,而且能正确反映出实体之间的联系,可以使信息的访问变得十分方便,不具有冗余数据。在使用数据库时,可以对数据字段设置属性和触发规则,从而保证表之间数据的完整性。2 数据库设计的一般步骤对VFP来说,要增强数据库的灵活性,一个重要的原则就是尽可能将信息拆分入表。不同主题内容的信息保存在不同的表中,避免设计大而复杂的表。数据库设计的一般步骤如下:明确建立数据库的目的,确立数据库的功能:确定收集信息的范围,并仔细收集这些信息,如学生信息管理系统涉及学生的学籍、成绩、图书借阅、奖学金等信息。确定表的种类:根据信息确定不同信息的范畴,提取公共信息组成公共信息表,并按照不同的主题确定表的个数和每个表包含的信息。确定表的结构:根据每个表的信息,确定表中的字段,将字段作为表中的一列。确定表之间的关系:将所创建的表进一步分析,确定各个字段之间关系,要明确为“一对一”、“一对多”关系,对于“多对多”关系最好对相关的表加以分解,添加新表或字段,从而转化为“一对一”、“一对多”关系。将所设计的数据库结构加以审核,看是否满足数据的独立性和完整性,必要时改进设计。数据库设计是整个应用系统建立的基石,一个设计良好的数据库可以使用权应用系统的建立变得更为简单,反之很可能使应用系统开发一半再重新改进数据库,造成巨大的浪费和损失。4.7.2 数据库的创建数据库的创建下面以“学生信息管理系统.dbc“为例介绍在VFP系统中创建数据库的方法和步骤。1)菜单方式使用VFP的菜单命令建立数据库的步骤如下:单击“文件”|“新建”,弹出“新建”对话框。在“新建”对话框中选择“数据库”,单击“新建文件”按钮,弹出“创建”对话框。在“创建”对话框中确定数据库的名称,如输入“学生信息管理系统”,再单击“保存”按钮,完成一个空数据库的创建。2)命令方式格式:CREATE DATABASE|?功能:创建一个数据库。说明:指定新建数据库的文件名,文件名中可以包含路径信息,默认扩展名为.dbc。缺省或出现“?”,则弹出“创建”对话框,让用户选择数据库文件存储位置和文件名。如:CREATE DATABASE 学生信息管理系统4.7.3 数据库的基本操作数据库的基本操作1)打开数据库格式:OPEN DATABASE|?EXCLUSIVE 功能:打开一个数据库。说明:缺省或出现“?”,弹出“打开”对话框,选择要打开的数据库文件。EXCLUSIVE 表示以独占方式打开数据库。2)修改数据库格式:MODIFY DATABASE|?功能:打开数据库设计器,修改当前数据库。说明:要修改的数据库必须先打开。3)关闭数据库格式:CLOSE DATABASE 功能:关闭当前数据库。说明:也可以使用CLOSE ALL关闭数据库。4.7.3 数据库的基本操作数据库的基本操作4)向数据库添加表(1)菜单方式单击“数据库”|“添加表”,在弹出的“打开”的对话框中,选定相应表文件,单击“确定”按钮即可。(2)命令方式格式:ADD TABLE 功能:向当前数据库中添加表如:ADD TABLE xsda.dbf说明:自由表添加到数据库中后,就成为数据库表,具有数据库表的属性。一个表只能同时属于一个数据库,如果该表已在其他数据库中,就必须先将该表从原数据库中移出后,才能添加到当前数据库中。5)从数据库移去表从数据库中移去表,该表就变成自由表,同时,还可以选择是否从磁盘上永久删除该表文件。(1)菜单方式在数据库设计器窗口中选定要移出的表。单击“数据库”|“移去”,会出现如图4-30所示的对话框。单击“移去”将选定的表从数据库中移出,成为自由表;单击“删除”则将该表从磁盘上永久删除。(2)命令方式格式:REMOVE TABLE DELETE 功能:从当前数据库中移去或删除一个表。说明:一个表从数据库中移出之后,成为自由表,可以添加到另一个数据库中。表从数据库中移出后,该表有关的主索引、默认值、有效性规则和永久关系也会被删除。DELETE 表示从数据库中移出该表,并将该表从磁盘上删除。4.7.3 数据库的基本操作数据库的基本操作6)为数据库建立永久关系VFP被称为关系型数据库。顾名思义,在每个独立的表中存储的数据之间是有一定联系的。可以在这些表之间定义关系,然后利用建立的这些关系来查找数据中有联系的信息。数据库表之间存在着永久关系和临时关系两种。永久关系一旦创建就保存在数据库文件中,它是相对临时关系而言的,临时关系是在使用时临时创建的,而永久关系不需要临时重新创建,在打开数据库时即被打开,并在“数据库设计器”和数据环境中显示为表索引间的连接线。它应用在“查询设计器”和“视图设计器”中,是自动作为默认连接条件的数据库表间关系。在永久关系的基础上,可设置表间的参照完整性规则,用以保证数据库各表相关数据的一致性。1)数据库表间关系两个表之间可能存在以下三种关系:一对一关系:A表的一个记录在B表中只能对应一个记录,反之也一样。但这种关系并不经常使用。一对多关系:A表的一个记