《visual foxpro6.0及其程序设计 郭盈发 第8章》由会员分享,可在线阅读,更多相关《visual foxpro6.0及其程序设计 郭盈发 第8章(94页珍藏版)》请在金锄头文库上搜索。
1、8.1 数据库的高级应用 8.2 设置表 8.3 建立表间关系 8.4 使用多个表,第八章 数据库和表的高级应用,返回主目录,数据库和表的高级应用,8.1 数据库的高级应用 8.1.1 向数据库加入自由表 用户可把不属于任何数据库的自由表添加入某个数据库中,一般有以下3种添加方法: (1) 在数据库设计器窗口中添加表:打开该数据库,从“数据库”菜单中选择“添加表”,在弹出的“打开”对话框中选择要添加的表,单击“确定”按钮即可。 (2) 在项目管理器中添加表:打开项目管理器,选择“数据”选项卡,选中要添加表的数据库,单击“添加”,在弹出的“打开” 对话框中选中要添加的表,单击“确定” 按钮即可。
2、,8.1.2 从数据库中移去表 当数据库不再需要某个表或其它数据库需要添加此表时,可从该数据库中移去此表,使之成为自由表。与添加表相对应,它也有以下3种移走方法: (1) 在数据库设计窗口中移去表:打开该数据库,选中要移去的表,从“数据库”菜单中选择“移去”,在弹出的对话框中选择“移去”即可。 (2) 从项目管理器中移去表:打开项目管理器,选中要移去的表,单击“移去”,在弹出的对话框中单击“移去”即可。 (3) 使用REMOVE TABE命令移去表:首先打开数据库,再使用REMOVE TABE命令将指定表移去。,命令格式:REMOVE TABE 例1 执行下述命令,将把“部门.DBF”表从“雇
3、员管理.DBC”数据库中移去。 OPEN DATABASE 雇员管理 REMOVE TABE 部门,8.1.3 使用其它数据库中的表 要使用一个非当前数据库中的表,可使用USE命令和“!”。 命令格式:USE! 其中 为将要打开的 所在的数据库名。 例2 假设现有一名为“教学管理.DBC”的数据库,其中有一个“课程.DBF”表文件,若当前数据库为“雇员管理.DBC”,要浏览“课程.DBF”表,可使用如下命令: OPEN DATABASE雇员管理 & 使“雇员管理.DBC”成为当前数据库,8.1.4 建立存储过程 存储过程是保存在数据库中的独立程序,属于数据库管理的对象。存储过程可供数据库中有关
4、对象调用,从而实现对数据库的管理。建立存储过程的步骤如下: 进入数据库设计器,右击鼠标,从快捷菜单中选择“编辑存储过程的代码窗口”。 在该窗口中输入存储过程代码,可连续或多次输入多个存储过程,但每个存储过程必须以PROCEDURE开头,后跟过程名。 输入完毕后按CTR+W键存盘,结束存储过程的设计。,PROC ZGTRI_UPD( ) IF EMPTY(姓名) =MESSAGEBOX(“姓名不能为空“) RETURN .F. ESE RETURN .T. ENDIF,PROC ZGTRI_DE( ) REC=RECNO( ) =MESSAGEBOX(“已删除“ + ATRIM(STR(REC)
5、 + “号记录“) RETURN .T.,8.1.5 使用多个数据库 在VFP中,有两种同时使用多个数据库的方法:一种是不打开数据库而引用其中的表,如8.1.3节所介绍的;另一种是同时打开多个数据库,设置其中一个为当前数据库,并在其中选择表。 1. 打开多个数据库 用户可视需要使用OPEN DATABASE命令打开多个数据库。 2. 设置当前数据库 在VFP中尽管可以同时打开多个数据库,但是只能有一个是当前数据库。,在VFP中尽管可以同时打开多个数据库,但是只能有一个是当前数据库。所有对打开的数据库进行操作的命令和函数,如ADD TABE命令和DBC( ) 函数(见附录B)等,都是针对当前数据
6、库而言的。 设置当前数据库的命令格式:SET DATABASE TO 如果省略数据库名称,则没有设置当前数据库。,8.2 设 置 表,8.2.1 设置表 打开如图81所示的表设计器窗口,用户还可以对表进行进一步的设置。 1. 设置字段注释 字段注释是对字段的说明信息,将和字段结构一同保存,但不显示出来,其设置方法是:首先在“字段名”栏中选定需要设置注释的字段,在“字段注释”文本框里输入注释信息即可。 2. 设置字段的显示属性 要为某字段设置显示属性,首先在“字段名”栏中选中该字段,再在“显示”组框内为该字段设置各项显示属性。,格式:用于确定一个字段在表单、浏览窗口或报表中的显示格式,它实际上是
7、字段的输出掩码。下面是常用的格式码: D使用当前系统设置的日期格式。 当输出数值型数据时,用0代替前导空格。 T禁止输入字段的前导空格和结尾空格字符。 !把输入的小写字母转换为大写字母。 $显示当前系统设置的货币符号。 *在数值型数据的左侧显示“*”号。 .用于指定数值型数据的小数点位置。 ,用于分隔小数点左边的整数部分,一般用来分隔千分位。,输入掩码:用于指定字段的输入格式,使用输入掩码可以屏蔽非法输入,减少人为的数据输入错误,保证输入的字段数据格式统一、有效,下面是常用的输入掩码。 X可输入任何字符。 9可输入数字和正负符号。 A只允许输入字母(禁止输入数字、空格或标点符号)。 # 可输入
8、数字、空格和正负符号。 Y只允许输入逻辑值Y,y,N,n,并把y和n分别变为Y、N。 N只允许输入字母和数字。 标题:通过为字段设置标题,可以定制表的浏览效果。,3. 设置字段的有效性规则 字段的有效性规则用来验证输入该字段的数据是否合法,可通过“字段有效性”组合框对其进行设置:首先选中要设置的字段;在“规则”文本框中键入有效性表达式,或单击右边的按钮,在“表达式生成器”中生成有效性表达式;再在“信息”文本框中键入当违反有效性规则时的报错信息(必须由引号括起来)即可。 在为字段设置了有效性规则后,若输入该字段的数据非法,例如,如果为“职工.DBF”表的“工资”字段设置的有效性规则为“工资0”,
9、报错信息为“工资必须大于0”,这时输入“0”,则VFP将显示一个如图82所示的警告框,提示用户重新输入,警告框中的信息,图82 警告框,4. 为字段设置默认值 用户在向表中输入记录时,有时会遇到这种情况:多个记录的某个字段取值相同。为此,可把一些频繁出现的值设置为该字段的默认值。这样,在为表追加新记录时,系统会自动给该字段赋默认值。 为字段设置默认值的方法是:首先选中要指定默认值的字段,在“默认值”文本框中键入字段的默认值即可。,8.2.2 设置表属性 在表设计器中,除了可以设置字段属性,还可以打开如图83所示的“表”选项卡,为整个表或表中的记录设置各种属性。 1. 为表设置长名 用户可以为数
10、据库表设置一个长表名,以便于标识,其设置方法是在“表名”文本框中输入用户指定的长表名,但这个“表名”不同于表文件名,为表设置长名后,并不改变表文件名。缺省情况下,表名就是表文件名。,1. 为表设置长名 用户可以为数据库表设置一个长表名,以便于标识,其设置方法是在“表名”文本框中输入用户指定的长表名,但这个“表名”不同于表文件名,为表设置长名后,并不改变表文件名。缺省情况下,表名就是表文件名。 规则:在该文本框中输入一个合法的VFP表达式作为记录有效性规则。当该表达式的值为“真”(.T.)时,认为记录输入合法;否则,判定记录输入为非法,并显示一报错信息。 信息:在该文本框中输入一个字符型的表达式
11、(必须用引号括起),它是记录没有通过有效性检验时显示的报错信息。如果不对其进行设置,则系统将显示一个默认报错信息。,3. 设置触发器 触发器是一个记录级的事件代码,在对表中记录进行插入、更新或删除时激活,调用要执行的语句或存储过程。不同的事件可对应不同的操作,触发器在规则之后运行。VFP中共有3种类型的触发器: 插入触发器:每次向表中插入或追加记录时触发。 更新触发器:每次更新表中记录时触发。 删除触发器:每次从表中删除记录时触发。 要设置某个触发器,只需在相应的文本框中输入要调用的表达式或存储过程名即可。,例4 为“职工.DBF”表设置触发器。其设置步骤如下: 进入“职工.DBF”表的设计器
12、,选择“表”选项卡。 在“插入触发器”文本框中输入记录时要触发的程序(即存储过程名):ZGTRI_INS( )。 在“更新触发器”、“删除触发器”文本框中分别插入ZGTRI_UPD( )和ZGTRI_DE( ) 两个存储过程名。 单击“确定”按钮。 有关存储过程的详细内容参见8.1.4节。 触发器设置完成后,当在职工表中插入、修改或删除记录时,便会触发相应的存储过程。例如,插入一条记录时,若“姓名”字段为空,则会显示一个信息框提醒用户。请读者自己上机验证。,8.3 建立表间关系,在一个数据库中,通常包含若干张表,如“雇员管理.DBC”数据库就包含了3张表:“职工.DBF”、“工资.DBF”、“
13、部门.DBF”。它们之间并非彼此独立存在,而是相互联系的,关系数据库系统的一大特点就是可以建立表间的关系,以反映现实世界错综复杂的联系,减少数据的冗余。通常,表与表之间存在以下3种关系: 一对一关系:一个表的一条记录对应另一个表的一条记录。 一对多关系:一个表的一条记录对应另一个表的多条记录。 多对多关系:一个表的多条记录对应另一个表的多条记录。 一般最常用的是前两种关系。,8.3.1 创建表间关系 在数据库设计器中,通过连接不同的索引,可创建表与表之间的关系,这种关系将随着数据库的存在而一直存在,因此又称为永久关系。当在查询设计器、视图设计器或数据环境设计器中使用表时,这些永久关系将作为表间
14、的默认链接出现。 创建表间关系的步骤如下: 打开要创建表间关系的数据库,进入数据库设计器。 为各表中需建立关系的字段建立索引。 如果两张表之间是一对一或一对多关系,则对父表(又称主表)的相应字段所建索引类型必须是主索引或候选索引,而对子表(又称从表)的相应字段所建索引类型可以是主索引、候选索引、惟一索引或普通索引。,若是主索引或候选索引,则表间关系是一对一的,否则,该关系为一对多。 创建表间关系。 在数据库设计器中,用鼠标左键按住一个表的索引,将其拖放到想建立关系的另一个表的相应索引上即可。建立关系后的两表之间会出现一连线,其中不带分岔的一端表示关系中的“一”方,而带有3个分岔的一端表示关系中
15、的“多”方。,8.3.2 删除表间关系 如果要删除已建立的表间的某个关系,用鼠标单击对应的关系连线,此时,该关系连线变粗,按“DE”键即可;或右击鼠标,从快捷菜单中选择“删除关系”,也可将关系删除。,8.3.3 编辑表间关系 要编辑表间关系,只需用鼠标单击相应的关系连线,使其变粗,再右击鼠标,从弹出菜单中选择“编辑关系”,将打开“编辑关系”对话框,可在该对话框中对关系进行编辑;或直接用鼠标双击相应的关系连线,也可打开“编辑关系”对话框。,8.3.4 编辑参照完整性 参照完整性涉及主关键字和外部关键字的概念,首先看一下什么是主关键字和外部关键字。 (1) 主关键字:表中的某个字段(或最小字段组合
16、)可以惟一地确定一条记录,称为该表的主关键字。例如,职工表中的职工号,可以惟一地确定一个职工,即职工号为职工表的主关键字。 假设“雇员管理”数据库中另有一个“部门表”,由“部门名”、“部门电话”、“负责人”字段组成,我们可以将表的结构写成如下的形式: 部门(部门名,部门电话,负责人) 在该表中,部门名可以惟一确定一个部门记录,即部门名为该表的主关键字。,在职工表和部门表中,有一对相同性质的字段:职工表中的“部门”字段和部门表中的“部门名”字段。它们都是表示部门名称的,并且通过这对字段可以把职工和部门联系起来。 (2) 外部关键字(也称为外关键字):设有表1和表2两个数据库表,如果表1中有一个字段(或字段组合)A,A不是表1的主关键字,但和表2的主关键字相对应,则称A是表1的外部关键字。 例如,上述职工表和部门表中,字段“部门”不是职工表的主关键字,但又和部门表中的主关键字“部门名”相对应,所以