在“表设计器”对话框的“表”选项卡中,除了前面讲到的设置表的长表名外,还可以设置各条记录的验证规则,并可设置在记录中插入、删除或更新时的完整性规则。
当向数据表中添加记录时,有时只根据一个字段的内容是无法判断该内容的有效性的,需要对同一条记录的多个字段内容进行相互比较与判断才行。记录有效性规则就是用来设置同一记录不同字段数据之间所要满足的逻辑关系。
在“表”选项卡的“记录有效性”设置区内有“规则”和“信息”两个文本框。可以在“规则”文本框中输入一个逻辑表达式作为记录有效性判断的条件,而在“信息”文本框中输入违反该规则时所显示的提示信息。
例如,在学生档案表(xsda.dbf)中添加“年龄”字段。由于“年龄”和“出生年月”两个字段是相关的,如当前年份为2007年,出生年份是1986年,则年龄必然是21岁,通过设置记录的有效验证规则,就可以实现这个功能。
在学生档案表(xsda.dbf)的“表设计器”对话框中,单击“表”选项卡,在“规则”文本框中输入“Year(date())-Year(出生年月)=年龄”,在“信息“文本框中输入“年龄应该等于2007年减去出生的年份!”,如图3-26所示。
图3-26 设置记录的有效性规则
这样,在修改或者添加记录时,如果“年龄”和“出生年月”这两个字段输入的数据不符合要求,则系统会弹出相应的提示信息,如图3-27所示。
另外,可以在使用Create Table或Alter Table命令的Set Check子句来设置记录级的验证规则的同时,再加上Error子句来定义出错信息。
用命令的方式建立上面的验证规则,并自定义出错信息,其命令如下:
Alter Table Student Set Check YEAR(DATE())-YEAR(出生年月)=age;
Error "年龄应该等于2007年减去出生的年份!"
图3-27 两字段不符合要求时的情况
触发器(Trigger)是绑定在表上的表达式,当表中的任何记录被指定的操作命令修改时,触发器即被激活。当数据修改时,触发器可执行数据库应用程序要求的其他任何操作。
通过触发器,可以实现记录对数据库的修改并实施参照完整性。
注意:只有在数据库表中才能设置触发器,自由表不能设置触发器。
以下几种任务触发器是不能完成的:
· 移动当前工作区的记录指针。
· 改变当前记录中的任意字段的值,而没有进行记录间的移动。
· 关闭当前工作区或关闭同一工作区打开的文件。
如果从数据库中移去一个表,则将同时删除和该表相关联的触发器。触发器在进行了所有的检查之后被激活,与字段级规则和记录级规则不同的是,触发器对缓冲数据(即未写入到数据库中的数据)无效。
可以直接在“表设计器”中创建触发器,其中包括3项内容:插入触发器、更新触发器和删除触发器。可以在3个文本框中指定触发器函数名,或者包含触发器表达式的存储过程名。对于每个表,可以为插入、更新及删除这3个事件各建立一个触发器。一个表最多只能有3个触发器,它所返回的值必须是逻辑真(.T.)或假(.F.)。
例如,在“filmdata.dbf””(影碟基本资料)数据表中,添加一个更新触发器来完成以下功能:当输入或更新记录的“现有存量”(number字段)小于或等于5时,提示“现有存量过少,请急需进货!”。其具体操作步骤如下:
(1)打开“filmdata.dbf”(影碟基本资料)所在的“数据库设计器”窗口,如图3-28所示。
(2)选择该表,单击菜单“数据库”→“编辑存储过程”命令,系统将会弹出一个存储过程的编辑窗口,在其中输入相应的程序代码,如下所示:
PROCEDURE Mystores()
IF number<=5
messagebox("现有存量过少,急需进货!")
ENDIF
ENDPROC
图3-28 打开“数据库设计器”窗口
(3)保存并关闭该窗口后,在“表设计器”对话框的“表”选项卡中,移动光标至“更新触发器”文本框中,输入存储过程名“Mystores()”,然后单击“确定”按钮。
(4)当在“filmdata.dbf”(影碟基本资料)表中添加或修改“现有存量”小于或等于5的数据时,系统自动弹出信息框,如图3-29所示。
图3-29 更新触发器的触发结果