1、第5章 数据库与表,5.1数据库概述与设计,一、数据库概述在Visual FoxPro中,数据库是一个逻辑上的概念和手段,通过一组系统文件将相互联系的数据库表及其相关的数据库对象进行统一组织和管理。,5.1数据库概述与设计,二、数据库设计,在建立Visual FoxPro数据库时,数据库是以扩展名为.dbc的文件存在磁盘上的,数据库备注文件扩展名为.dct和数据库索引文件扩展名为.dcx的。Visual FoxPro中的数据库不能存储数据,但它可以管理数据与数据之间的联系。,5.2数据库基本操作,一、建立数据库命令方法格式:CREATE DATABASE |? 菜单方式 利用项目管理器建立数据
2、库,5.2数据库基本操作,一、表的类型 在Visual FoxPro中,表是收集和存储数据的基本单元,表是扩展名为.DBF,如果有备注或通用型字段则还会有一个对应扩展名为.FPT的文件。 表分为两类:一类为自由表,另一类为数据库表,5.3表概述与建立过程,一个表由表结构和表记录两部分组成,表名,表结构,表内容,5.3表概述与建立过程,5.3表概述与建立过程,二、创建表结构如果建表时数据库是打开的,则建立的表为当前数据库表,否则,建立自由表。无论建立那种表,其方法都相同。,建立表结构的方法有很多,在这里主要讲述三种方法: 命令方式 格式: CREATE | ? 说明:在建立数据库表时,要先打开数
3、据库。 菜单方式 项目管理器方式,5.3表概述与建立过程,表设计器介绍,5.3表概述与建立过程,表设计器介绍,表设计器对话框中包含“字段”、“索引”、“表”三个选项卡。 1“字段”选项卡,标题:若表结构中字段名用的是英文,则可以在标题中输入汉字,这样显示该字段值时就比较直观了。没有设置标题,则将表结构中的字段名作为字段的标题。,字段的显示属性,5.3表概述与建立过程,格式:控制字段在浏览窗口等显示时的样式。,5.3表概述与建立过程,输入掩码:控制输入该字段的数据的格式。,添加寝室字段,显示格式为:楼层房号,5.3表概述与建立过程,字段有效性规则:限制该字段的数据的有效范围。在规则中输入:性别=
4、“男“.OR.性别=“女“。规则是一个逻辑型表达式。信息:当向设置了规则的字段输入不符合规则的数据时,就会将所设置的信息显示出,信息是字符型常量,如“性别只能是男或女!”。 默认值:当往表中添加记录时,系统向该字段预置的值。在“性别”字段中输入默认值为“男”。,5.3表概述与建立过程,例5.1 建立一个文件名为“学生”表的表结构。,小数位,设置高考成绩字段的有效性规 则为:高考成绩=0;信息为: “高考成绩必须大于等于零”;默认 值为.null.;并且允许用.null.。,5.3表概述与建立过程,三、录入表数据,1立即追加数据 如果刚建好表结构时,在系统提示。 2直接追加数据 分为命令方式和菜
5、单方式两种方法。 命令方式 【格式】APPEND BLANK 【功能】在当前已打开表的末尾追加一条或多条记录。 【说明】BLANK:表示在表末尾追加一条空记录,并自动返回命令窗口,此时系统并不弹出编辑窗口。,5.3表概述与建立过程,菜单方式 (1)首先打开表学生.DBF。 (2)选择【显示】|【追加方式】命令,可以追加多条记录。选择【显示】|【浏览】命令,然后再选择【表】|【追加新记录】命令,用户可以追加一条记录。,5.3表概述与建立过程,四、表的删除 1删除自由表 【格式】 DELETE FILE 表文件名.DBF 【功能】将指定的表文件从磁盘上删除。 【说明】表文件名.DBF:指定要删除表
6、的名称,若不指定文件名,系统会弹出“删除”对话框,选择要删除的表文件。 要删除的表文件必须处于关闭状态。,5.3表概述与建立过程,2删除数据库表先将表从数据库中移去,然后再用删除。 移去数据库表的命令是: 【格式】REMOVE TABLE 表文件名|?DELETERECYCLE 【功能】从当前数据库中移去一个表。 【说明】 DELETE:在移去数据库表的同时,从磁盘上删除。 RECYCLE:在移去数据库表的同时,放入回收站中。,3利用项目管理器 在项目管理器中选中需要删除的表,选择“移去”按钮。 在“选择”对话框中,若选择“移去”按钮,则将表文件移出项目文件,若选择“删除”按钮,则将表文件从磁
7、盘上删除。,5.3表概述与建立过程,一、表结构的显示 【格式】 LIST | DISPLAY STRUCTURE 【功能】对打开的表以列表或分屏的方式显示其结构。,5.4表结构的基本操作,二、表结构的修改 1命令方式 【格式】 MODIFY STRUCTURE 【功能】打开当前表的设计器。,5.4表结构的基本操作,2菜单方式 选择【文件】|【打开】命令,打开表文件。 选择【显示】|【表设计器】命令,打开表设计器。 之后操作同命令方式。 3利用项目管理器,5.4表结构的基本操作,一、打开表 1命令方式 【格式】USE 【功能】打开指定磁盘的指定路径下的表文件。 【说明】和:指定表文件所在的驱动器
8、及路径,若省略盘符和路径参数,则打开当前盘、当前路径下的表文件。 2菜单方式 单击“文件”菜单,选择“打开”命令,5.5表的基本操作,二、关闭表 1打开另一个表文件 2使用不带任何选项的USE命令 【格式】USE 【功能】关闭当前已打开的表文件。 3使用CLEAR命令 【格式】CLEAR ALL 【功能】关闭所有工作区中已打开的表文件、索引文件、格式文件及备注文件等,同时释放所有的内存变量,并选择工作区1为当前工作区。,5.5表的基本操作,二、关闭表 4使用CLOSE命令 【格式】CLOSE ALL 【功能】关闭各种类型文件,并选择工作区1为当前工作区。 5退出Visual FoxPro系统
9、【格式】QUIT 【功能】退出Visual FoxPro系统,并关闭所有打开的文件,返回操作系统。,5.5表的基本操作,三、显示表记录 1.命令方式。 【格式】LIST | DISPLAY FIELDS FOR WHILE OFF 【功能】显示将当前表文件的记录。 【说明】DISPLAY命令与LIST命令的功能相似,如果同时缺省和子句,DISPLAY命令只显示当前的一条记录,而LIST命令则是取默认值ALL而显示全部记录。,5.5表的基本操作,FIELDS :用来指定显示的字段。 :用来指定显示哪些记录。ALL:所有记录。NEXT N:从当前记录开始,后面的N条记录 (包括当前记录)RECOR
10、D N:第N条记录。REST:当前记录后的全部记录(包括当前记录)。 FOR:指定对满足条件的记录进行操作。 WHILE:也是指定对满足条件的记录进行操作,但是,当第一次遇到不满足条件的记录时,停止继续往后搜索。 WHILE若与FOR同时使用,则WHILE项优先; OFF:表示不显示记录号。,list list for 性别=“女“ list for 性别=“女“ and 党员=.t.go top list next 3 off list rest fields 学号,姓名,性别,5.5表的基本操作,2。浏览窗口显示记录。 【命令】BROWSE FIELDS FOR 【菜单】打开表【显示】|【
11、浏览】命令,这时还可以选择【显示】|【浏览】或【编辑】来改变浏览窗口显示方式。 在项目管理器中选定表,单击“浏览”按钮。,5.5表的基本操作,四、记录指针,Visual FoxPro为当前表文件设置了一个记录指针,指针所指向的记录称为当前记录。一张表刚打开时,记录指针自动指向第1条记录。记录指针定位有绝对定位、相对定位和条件定位三种。,5.5表的基本操作,1.绝对定位 【命令】 GO | GOTO 【功能】 将记录指针绝对定位到指定的记录上; TOP是表头,当不使用索引时是记录号为1的记录,使用索引时是排在最前面的索引对应的记录。 BOTTOM是表尾,当不使用索引时是记录号最大的那条记录,使用
12、索引时是排在最后面的索引对应的记录。,5.5表的基本操作,例: 绝对定位命令的用法,学生表共十条记录。 USE 学生 &指针指向第一条记录 GOTO 2 &指针指向第二条记录 GO 3 &指针指向第三条记录 ? RECNO() &显示当前记录的记录号:3 GO BOTTOM &指针指向最后一条记录 ? RECNO() &显示当前记录的记录号:10,5.5表的基本操作,2.相对定位 【命令】SKIP 【功能】记录指针从当前记录向前(或向后)移动若干个记录。 【说明】:表示移动的记录个数。若数值表达式的值为负值,表示向前移动记录;否则,表示向后移动记录。如果缺省此项,则表示向后移动1个记录。,5.
13、5表的基本操作,USE 学生 GOTO 2GO 3 ? recno()SKIP 4 ? recno()SKIP -4 ? recno(),5.5表的基本操作,3.条件定位 【命令】LOCATE FOR 【功能】将记录指针定位在满足条件的第一条记录上,如果没有满足条件的记录则指针指向文件结束位置。 【说明】要使指针指向下一条满足条件的记录,用LOCATE FOR与CONTINUE配对使用。USE 学生LOCATE FOR 性别=“女“DISPCONTINUDISP,五修改记录 1.编辑修改 【格式】EDIT | CHANGE FIELDS FOR WHILE 【功能】编辑修改当前打开的表文件的记
14、录。 【说明】FIELDS :若选择此选项,则只列出字段名表中的字段;若未选择此选项,将显示表中的所有字段。 :默认范围为全部记录。,5.5表的基本操作,例: 修改学生.DBF中,“刘英”同学的学号、姓名和性别。 USE 学生 EDIT FIELDS 学号,姓名,性别 FOR 姓名=“刘英”,5.5表的基本操作,浏览修改 浏览修改有命令和菜单两种方式: 【命令】BROWSE FIELDS FOR 【菜单】 打开表选择【显示】|【浏览】命令,5.5表的基本操作,3.替换修改 【命令】REPLACE WITH ADDITIVE, WITH ADDITIVE . FOR WHILE 【功能】用指定表
15、达式的值替换当前表中满足条件记录的指定字段的值。 【说明】该命令适合对当前表进行成批地、有规律地修改。缺省范围、条件时,仅替换当前记录。该命令回车后,数据修改自动完成。适用于程序设计。ADDITIVE只对备注型字段修改有效。表示将表达式值添加到字段的原有内容后面,否则取代原有内容。表达式的类型必须与字段类型一致。 表达式的值不能超出字段宽度,否则,数据无效。,例: 修改表学生.DBF中的“高考成绩”字段数据,每个人加5分。 USE 学生 REPLACE ALL 高考成绩 WITH 高考成绩+5 例:修改表学生.DBF中的“高考成绩”字段数据,给每个女生加5分。 USE 学生 REPLACE 高
16、考成绩 WITH 高考成绩+5 FOR 性别=“女”,菜单方式: 打开表文件。选择【显示】|【浏览】命令。 选择【表】|【替换字段】命令,弹出 “替换字段”对话框。 选择要进行替换操作的字段名,在“替换为”显示栏中输入替换表达式,再选择“替换条件”显示框中的范围、条件。 单击“替换”按钮。,5.5表的基本操作,六、插入记录 【命令】INSERT BEFORE BLANK 【功能】在当前表文件的指定位置插入新记录或空记录。 【说明】INSERT是在当前记录之后插入新记录,INSERT BEFORE是在当前记录之前插入新记录,INSERT BLANK是在当前记录之后插入空记录。若表文件建立了索引,
17、则插入的新记录按索引值进行排列。 在表学生.DBF的第2号记录前插入一条新记录。USE 学生 GOTO 2INSERT BEFORE,七删除记录表记录的删除也是表维护的一项经常性的工作,因为删除意味着数据的消失,所以对记录的删除操作比较慎重,删除可分为逻辑删除和物理删除两种操作。逻辑删除还可以恢复,而物理删除则不可恢复。逻辑删除就是给指定的记录作删除标记。,5.5表的基本操作,1逻辑删除记录 用命令为记录做删除标记 【格式】DELETE FOR WHILE 【功能】对当前表中指定范围内满足条件的记录作删除标记。 【说明】如果同时缺省和 子句,则仅仅删除当前的记录。 delete for 性别=
18、“男“,5.5表的基本操作,菜单方式 打开表文件,选择【表】|【删除记录】 在“浏览”窗口中做删除标记,5.5表的基本操作,2恢复逻辑删除记录 命令方式 【格式】RECALL FOR WHILE 【说明】RECALL命令与DELETE命令相对应,它可以去掉被逻辑删除记录的删除标记。 delete for 性别=“女“ list 姓名,性别,学号 recall all list 姓名,性别,学号 use,菜单方式 首先打开表文件选择【显示】|【浏览】命令选择【表】|【恢复记录】命令。,5.5表的基本操作,3物理删除记录 命令方式 【格式】PACK 【功能】将当前表文件中所有带删除标记的记录全部真
19、正地删除掉。 【说明】执行该命令后被删除的记录将不能被恢复,因此使用时应特别小心。USE 学生DELETE FOR 学号=“20072601” PACK,菜单方式 首先打开表文件选择【显示】|【浏览】命令,系统弹出记录浏览窗口。 【表】菜单选择【表】|【彻底删除】命令。,5.5表的基本操作,4删除全部记录 【格式】ZAP 【功能】将当前打开的表文件中的所有记录完全删除掉。 【说明】执行该命令之后,将只保留表文件的结构,而不再有任何数据存在。,5.5表的基本操作,八、数据表与数组之间的数据交换,数组,数据表记录,5.5表的基本操作,1将当前记录复制到数组 【命令】SCATTER FIELDS M
20、EMO TO 【功能】将当前记录的字段值按顺序送入数组元素中。 【说明】 FIELDS:若选择它只传送字段名表中的字段值,否则将传送所有字段值(备注型和通用型除外)。若要传送备注型字段值,还需要使用MEMO。 TO :将数据复制到所示的数组元素中,如果定义的数组长度不够,Visual FoxPro会自动扩大数组长度。,例题: USE 学生 SCATTER FIELDS 姓名,性别 ,高考成绩 TO MM LIST MEMORY LIKE MM,2将数组的数据复制到当前记录 【命令】GATHER FROM FIELDS MEMO 【功能】将数组中的数据依次复制到当前记录,以替换相应字段值。 【说
21、明】 FIELDS:仅字段名表中的字段值被数组元素替代,否则将按顺序依次替代,多出的字段不改变;若数组元素多于记录中字段个数,则多余数组元素被忽略。若不选用MEMO,则忽略备注字段。,例题:USE 学生 APPEND BLANKDIME NN(3)NN(1)=“888888“NN(2)=“高飞“NN(3)=580GATHER FROM NN FIELDS 学号,姓名,高考成绩BROW,5.6排序,为了高效方便地存取数据,往往要求表记录以一定的顺序排放或显示,因此,Visual FoxPro提供了两种方法重新组织数据,即排序和索引。排序是从物理上对表进行重新整理,按照指定的关键字段的值的大小来重
22、新排列表中数据记录的顺序,并产生一个新的表文件。由于新表的产生即费时间也浪费空间,实际中很少用。,排序的命令是: 【格式】SORT TO ON /A | /D /C , /A | /D /C .ASCENDING | DESCENDING FOR WHILE FIELDS 【功能】对当前打开的表,按指定的字段进行排序,生成新的表文件。 【说明】 用作排序的字段的数据类型允许是N、C、D、L。 /A 表示升序; /D 表示降序; /C 表示不区分大小写,/C可以与/A或/D合用,如/AC或/DC。当有多个关键字段时,先按字段1的值排列,其值相同的,再按字段2的值排列。,ASCENDING:将所有
23、不带/D的字段指定为升序排序。 DESCENDING:将所有不带/A的字段指定为降序排序。 FIELDS :默认新表的结构可以与原表相同,也可以使用FIELDS取部分字段。,例题:USE 学生SORT TO 学生性别 ON 性别/D USE 学生性别BROW,5.7索引,一、索引及相关概念 1索引及索引文件的概述索引是从逻辑上对表进行重新整理,按照指定的关键字段建立索引文件,索引文件是由指向表文件记录的指针构成的。一个表文件可以建立多个索引文件,任何时候只有一个索引文件起作用,此索引文件称为主控索引。 索引文件必须与原表一起使用,打开索引文件时,将改变表中记录的逻辑顺序,但并不改变表中记录的物
24、理顺序。索引可以提高查询速度,但是降低了更新速度。,5.7索引,一、索引及相关概念 1索引文件的类型单索引文件 、复合索引文件,主索引,不能有重复值 数据库表有 一个表一个 建立永久性联系时,主表所使用的索引,候选索引,唯一索引,普通索引,不能有重复值 表都可建立 一表可建多个,索引项唯一,不是值唯一。 仅保留第一次出现的索引关键字值图像易变形 表都可建立,一表可多个,允许关键字值的重复 表都可建立,一表可多个 建立永久性联系时,主表所使用的索引 。,3索引关键字和索引类型 索引关键字:指在建立索引用的表达式可以是单个字段也可以是几个字段组成的表达式。,5.7索引,二、表设计器方式建立索引 1
25、.在字段选项卡建立索引 2.在索引选项卡建立索引,5.7索引,三、用命令建立索引 1单索引文件的建立 【格式】INDEX ON TO UNIQUE FOR ADDITIVE 【功能】对当前表中满足条件的记录,按的值建立一个索引文件,并打开此索引文件,其缺省的文件扩展名为.IDX。单索引文件只能按升序排序。 【参数描述】 UNIQUE:建立唯一索引。 ADDITIVE:表示建立索引文件时,并不关闭先前的索引。 FOR :索引文件只为那些满足条件的表达式的记录创建索引关键字,USE 学生INDEX ON 入校总分 TO rxzfindex on 性别+姓名 to xbxmidx unique,2.
26、复合索引文件的建立复合索引文件是由索引标记组成的,每个复合索引文件可包含多个索引标记,每个索引标记都有标记名,一个索引标记相当于一个单索引文件。,5.7索引,含有多个索引项的索引文件,称为复合索引文件, 该文件的扩展名是.CDX。复合索引又分为结构复合索引和非结构复合索引。 结构复合索引的特点是: 结构复合索引的文件名与数据表文件名相同。 该索引文件随表文件同时打开和同时关闭。 该索引文件自动更新。 非结构复合索引的特点是: 非结构复合索引的文件名与数据表文件名不相同。 该索引文件必须使用单独的打开命令。 该索引文件不自动更新。,【格式】INDEX ON TAG OF FOR ASCENDIN
27、G | DESCENDING UNIQUE CANDIDATEADDITIVE 【功能】建立复合索引文件,并打开此索引文件,其缺省的文件扩展名为.CDX。 【参数描述】 TAG :此选项只对建立复合索引文件时有效,指定建立或追加索引标识的标识名。 OF :TAG 参数中不包含可选的OF 子句时,便可以创建结构复合索引文件。 如果在TAG 参数后包含可选项OF 子句,则可以创建非结构复合索引文件。,说明: 执行上述命令时,系统先检查指定的复合索引文件是否存在,若存在,在此文件中增加一个索引标记,若不存在,则建立此索引文件。 标记名的命名规则与变量名的命名规则相同。 单索引文件只能按升序排列,而复
28、合索引文件既可以按升序排列也可以按降序排列,选择DESCENDING为降序,选择ASCENDING为升序,缺省时约定为升序。 表的显示和访问顺序只由一个索引文件(主控索引文件)和标识(主控标识)控制。,为表文件学生.DBF,建立一个结构复合索引文件,该索引文件包含两个索引项:一个索引名是入党情况,表达式是党员,记录按党员的升序排序;另一个索引名是XHJG,记录先按学号的降序排序,再按籍贯的降序排序的候选索引。USE 学生 INDEX ON 党员 TAG 入党情况 INDEX ON 学号+籍贯 TAG XHJG DESCENDING,5.7索引,为表文件学生.DBF,建立一个非结构复合索引文件F
29、F .CDX,该索引文件包含两个索引项:一个索引名和表达式都为出生日期的索引项,要求记录按出生日期的降序排序;另一个是索引名MZCJ,记录先按民族的升序排序,若民族相同,再按高考成绩的升序排序。USE 学生INDEX ON 出生日期 TAG 出生日期 OFFF DESCENDINGINDEX ON 民族+STR(高考成绩) TAG MZCJ OF FF,5.7索引,四、使用索引 1打开索引文件 (1)在打开表时打开索引文件 结构复合索引文件在打开表时将自动被打开。 【格式】USE INDEX ORDER | | TAG OF ASCENDING | DESCENDING 【功能】打开指定的表,
30、并且打开由指定的所有索引文件。,四、使用索引 已用INDEX ON 命令为学生.DBF表建立索引,命令如下: INDEX ON 高考成绩 TO CG INDEX ON 出生日期 TAG 出生日期 OF FF 用命令在打开表时打开索引文件 CLOSE ALL USE 学生 INDEX CG,FF LIST,四、使用索引 (2) 在打开表后打开索引文件 【格式】SET INDEX TO ORDER | | TAG OF ASCENDING | DESCENDING 【功能】打开指定的索引文件或关闭索引文件。省略所有选项为关闭当前工作区中除结构复合索引文件外的所有索引文件。 【参数描述】:指定要打开
31、的一个或多个索引文件。索引文件列表中可以包含多个单索引和复合索引文件。索引文件列表中,第一个索引文件成为主控索引,它控制记录的显示和访问。,四、使用索引 已用INDEX ON 命令为学生.DBF表建立索引,命令如下:INDEX ON 高考成绩 TO CG INDEX ON 出生日期 TAG 出生日期 OF FF 用命令在打开表后打开索引文件: CLOSE ALL USE 学生 SET INDEX TO FF, CG ORDER CG LIST,2设置主控索引 如果在打开索引文件时未指定主控索引,打开索引文件之后需要指定主控索引,或者希望改变主控索引,可使用下面的命令。 【格式】SET ORDE
32、R TO | TAG OF ASCENDING | DESCENDING 【功能】在打开的索引文件中指定主控索引。,已用INDEX ON 命令为学生.DBF表建立索引,命令如下: INDEX ON 高考成绩 TO CG INDEX ON 性别 TO XB INDEX ON 民族 TAG MZ INDEX ON 出生日期 TAG BIRTHDAY OF FF 用命令指定主控索引: CLOSE ALL USE 学生 SET INDEX TO CG ,XB,FF SET ORDER TO 2 LIST SET ORDER TO 3 LIST SET ORDER TO MZ LIST SET ORDE
33、R TO TAG BIRTHDAY OF FF LIST,3索引文件的关闭 【格式1】USE 【功能】关闭当前工作区中打开的表文件及所有索引文件。 【格式2】SET INDEX TO 【功能】关闭当前工作区中打开的所有单索引文件和复合索引文件。 【格式3】CLOSE INDEXS 【功能】关闭当前工作区中打开的所有单索引文件和复合索引文件。,4索引的删除 【格式】DELETE TAG OF , OF . 或:DELETE TAG ALL OF 【功能】从指定的索引文件中删除索引项。 【说明】OF :指定复合索引文件名,若缺省,则为结构复合索引文件。,五、索引查找1、FIND命令 【格式】FIN
34、D | 【功能】在表文件的主控索引中查找关键字值与或相匹配的第一个记录。 【说明】必须打开相应的表文件和索引文件,并设置对应的主控索引。查询字符串,字符串可以不用定界符括起来。查询常数,必须使用索引关键字的完整值。由于索引文件中关键字表达式值相同的记录总是排在一起的,可用SKIP、DISP命令来逐个查询。,例:打开表文件学生.DBF,查找姓“张”的记录。USE 学生SET ORDER TO 姓名FIND 张,2、SEEK命令 【格式】SEEK 【功能】在表文件的主索引中查找关键字值与值相匹配的第一个记录。 【说明】SEEK命令可以查找字符型、数值型、日期型、逻辑型表达式的值。表达式为字符串时,
35、必须用定界符括起来。日期常量也必须用大括号括起来。,例题:用SEEK命令在学生.DBF中,查找姓“张”的记录。USE 学生SET ORDER TO 姓名SEEK “张“,5.8数据完整性,在数据库中数据完整性是指保证数据正确的特性,数据完整性一般包括实体完整性、域完整性和参照完整性。 一、实体完整性与主关键字实体完整性是保证表中记录唯一的特性,即在一个表中不允许有重复记录。在Visual FoxPro中利用主关键字或候选关键字来保证表中记录唯一。 二、域完整性与约束规则域完整性用来保证表中每个字段的取值情况。表设计器中的类型、宽度和字段有效性规则都是用来保证域完整性的。,三、参照完整性参照完整
36、性是控制数据一致性,尤其是不同表的主关键字和外部关键字之间关系的规则。参照完整性必须在数据库里完成,而且数据库里的表之间必须建立永久性联系。 1永久关系Visual FoxPro表之间的关系分为临时关系和永久关系,具有永久关系的表只能是数据库中的表,这种关系不但在运行时存在,而且是一直保留到表被删除为止。而自由表只能在运行时建立一种临行关系,运行结束后该关系就不存在了。,设置永久性的联系,分主表和子表 找两张表的公共字段 在数据库设计器里建立联系,创建学生.DBF和成绩.DBF的永久性关系。,2设置参照完整性,创建学生.DBF和成绩.DBF的参照完整性。,设置参照完整性,双击关系线 右键关系线
37、 数据库编辑参照完整性,5.8数据完整性,三种规则,“更新规则”选项卡指定修改父表中的关键字值时所用的规则。 “删除规则”选项卡指定在删除父表中的记录时所用的规则。 “插入规则”选项卡指定在子表插入新的记录,或者在子表中更新已存在的记录时所用的规则。,规则含义: 级联:指定在父表中进行的修改在相关的子表中反映出来。如果您为一个关系选择了“级联”,无论何时修改父表中的记录,相关子表中的记录自动修改。 限制:禁止更改父表中的记录,这些记录在子表中有相关的记录。如果您为一个关系选择了“限制”,那么当在子表中有相关的记录时,则在父表中进行修改记录的尝试就会产生一个错误。 忽略:允许修改父表中的记录,同
38、时把受影响的子记录保留。,5.9 多表的操作,迄今所讲述的对表的操作都是在一个工作区进行的,每个工作区最多只能打开一个表文件,用USE命令打开一个新的表,同时也就关闭了前面已打开的表。在实际应用中,用户常常需要同时打开多个表文件,以便对多个表文件的数据进行操作。为了解决这一问题,Visual FoxPro引入了工作区的概念。,一、工作区的概念,1工作区和当前工作区 Visual FoxPro 能同时提供32767个工作区。系统默认值为1区。 在任意时刻,只有一个工作区是当前工作区,用户只能在当前工作区对打开的当前表进行操作。 每一个工作区都可以并且只能打开一个表文件。 同一个表文件不允许同时在
39、多个工作区打开,但在其它工作区中被关闭之后,可以在任意一个工作区中被打开。 各工作区中打开的表彼此相互独立(指针不受影响)。,2选择当前工作区 每一个工作区用工作区号或别名来标识。 (1)工作区号 利用数字132767来标识32767个工作区 (2)别名前10工作区用AJ这10个字母来标识。采用该工作区中已打开的表的名字作别名。用户自己为表定义一个别名。【命令格式】 USE ALIAS 【功能】打开表并为该表起一个别名。,3工作区的选择 【格式】SELECT | 【功能】选择一个工作区作为当前工作区。 【说明】| :指定当前工作区。选择工作区时,可以直接指定区号,也可以通过别名指定工作区,二者
40、是等效的。 如果指定“0”,则表示选用当前未使用过的编号最小的工作区作为当前工作区。 执行该命令后,对任何工作区中的表及记录指针均不发生影响,仅实现各个工作区之间切换。,在1号和2号工作区内分别打开学生.DBF和选课.DBF表文件,并选择1号工作区为当前工作区。SELECT 1 & 或 SELECT AUSE 学生SELECT 2USE 选课SELECT 1,二、使用不同工作区的表Visual FoxPro系统对当前工作区上的表可以进行任何操作,也可以对其他工作区中的表文件的数据进行访问。在主工作区可通过以下两种格式访问其他工作区表中的数据。 格式: - . 通过用工作区别名指定欲访问的工作区
41、,所得到的字段值为指定工作区打开的表当前记录的字段值。,在1号和2号工作区分别打开学生.DBF和成绩.DBF表,在1号工作区内查看当前记录的学号、姓名、性别、出生日期、课程号、成绩字段内容,其中课程号、成绩字段属于成绩表。SELECT A USE 学生 SELECT B USE 成绩 SELECT A & 选择1号工作区为当前工作区 DISPLAY 学号,姓名,性别,出生日期,成绩.课程号, B-成绩,三、表的关联,1、关联的概述虽然永久联系在每次使用表时不需要重新建立,但永久联系不能控制不同工作区中记录指针的联动。所以在开发Visual FoxPro应用程序时,不仅需用永久联系,有时也需使用
42、能够控制表间记录指针关系的临时联系。这种临时联系称为关联。,2表文件关联的建立 【格式】SET RELATION TO INTO | 【功能】将当前工作区的表文件与(或工作区号)指定的工作区中的表文件按建立关联。 【说明】用建立关联时,关键字必须是两个表文件共有字段,且别名表文件已按关键字段建立了索引文件,并已指定关键字段为主控索引。当父表文件的记录指针移动时,子表文件的记录指针将根据关键字段值与父表文件相同的记录移动。如果子表中没有与关键字段值相同的记录,记录指针指向文件尾,EOF()为.T.。,将表文件学生.DBF和成绩.DBF表以学号为关键字段建立关联。 SELECT 2 USE 成绩 INDEX ON 学号 TAG 学号 SET ORDER TO TAG 学号 SELECT 1 USE 学生 SET RELATION TO 学号 INTO 2 ?学号,姓名,B.课程号,B.成绩 GO 3 ?学号,姓名,B.课程号,B.成绩,3取消表的关联 (1)命令SET RELATION TO,取消当前表与其他表之间的关联。 (2)关闭表文件,关联都被取消,下次打开时,必须重新建立。关联是临时性的。,第五章 结束!,