中国学术文献网络出版总库

刊名: 教师教育研究
主办: 北京师范大学;华东师范大学;高等学校教资培训交流北京中心
周期: 月刊
出版地:北京市
语种: 中文;
开本: 大16开
ISSN: 1672-5905
CN: 11-5147/G4
邮发代号:2-418

历史沿革:
曾用刊名:高等师范教育研究
期刊荣誉:社科双效期刊;国家新闻出版总署收录;中国期刊网核心源刊;CSSCI 中文社会科学引文索引来源期刊;北京大学《中文核心期刊要目总览》来源期刊;
创刊时间:1989

关于Visual FoxPro中的空值问题浅析

【作者】 李惠英

【机构】 重庆市万州高级技工学校

【摘要】
【关键词】
【正文】摘   要:在Visual FoxPro数据库中,数据表的字段类型有字符型、数值型、日期型、货币型等,对于空值(NUL值)很多人不是很了解。有的时候我们可以利用空值进行数据查询,但是空值又不是真实存在的具体的数据,所以在数据库表中的用法比如输入、查询与其他的数据类型方法不相同,在浏览窗口中是不能真正输入NULL值的。本文将介绍正确为数据表输入空值的办法及空值的查询。
  关键词:字段类型  空值  输入
  空值是Visual FoxPro中比较重要的一个概念。但是在讲到空值时,有好多同学不能理解,相当一部份同学认为空值就是0,空字符,空着,这些感觉都很接近,但是实际上都是不对的。
  在数据表的操作过程中,很可能会遇到一些还没有被存储数据的字段,这就是空值。实际上是缺值或还没有被确定值,不能简单地把它理解为任何数据类型的数据。那空值是怎么表示的呢?我们又如何知道它是空值呢?下面我就以“学生档案表”为例,为其中的“班级”字段设置空值。
  通常我们知道字段的四个基本属性分别是:字段名、字段类型、字段宽度和小数位数,却不知道在“表设计器”中就可以对空值进行设置。当我们把表打开以后,就可以打开表设计器,方法是单击“显示”菜单下“表设计器”命令,也可以在命令窗口中输入“modify structure”命令,就可以打开“表设计器”对话框,如图1所示,在“字段”选项卡中就有一项是“NULL”,把这个选项勾选中,才允许该字段为空,否则就是不允许该字段为空。
  









                                          图1
  允许“班级”字段为空后,也并不能直接在浏览窗口中输入“NULL”或“.NULL.”来表示空值,看似是空值,其实不然,Visual FoxPro会把它看作是实际的值,会把“.”或“NULL”都看作是实实在在的字符。
  怎么输入空值呢?下面谈几种输入空值的方法。
  第一种方法:利用“表设计器”中设置“默认值”。在数据表中可以设置字段的默认值。在默认值一栏中输入“.NULL.”或点击输入栏后面的按钮,弹出“表达式生成器”对话框,在“逻辑”选项中选择“.NULL.”,如图2所示,单击“确定”按钮,这时会有一个提示,询问你是否更改表结构的对话框,单击“是”之后我们就为“班级”设置好了默认值是空值。
  









          图2
  点击“表”菜单下的“浏览窗口”,会发现在浏览窗口中记录并没有任何的变化,这时,我们选择“显示”菜单下的“追加方式”命令就可以看到一条新记录,并且“班级”字段会自动出现“.NULL.”,这样空值就显示成功了。此时我们用查询语句查询还没有确定班级的记录,其对应的语句是:SELECT * FROM 学生档案表 WHERE 班级 IS NULL 或者查询班级确定了的学生的记录,其对应的语句是:SELECT * FROM 学生档案表 WHERE 班级 IS NOT NULL.
  第二种方法:用replace命令。通常情况下,对某字段内容进行修改时,我们可以通过“表”菜单下的“替换字段”命令,但是这种方法对空值却是行不通的,如果用.NULL.去替换原字段值,会出现“表达式类型不符C或M”这样的提示语句,如图3所示。











          图3
  而我们知道replace命令的功能就是用指定值替换当前数据表文件中字段的内容,其命令格式是:REPLACE [<范围>] <字段> WITH <表达式> [,<字段> WITH <表达式>...][FOR/WHILE<条件>],在该命令中,把字段值替换为空值时,NULL既可以大小也可以小写,前后的两个点也可以省略。例如在学生档案表中,把第3条记录的“班级”字段值替换为空值,我们应当先把表打开,再转到第3条记录,输入命令:REPLACE 班级 WITH NULL 或者是REPLACE 班级 WITH .NULL.
  第三种方法:SQL语句中的UPDATE命令。SQL语句是一种结构化查询语言,包括了数据定义、数据更新、数据查询和数据控制等方面的功能,此时我们可以利用SQL语句的数据更新功能,输入空值。SQL的数据更新命令UPDATE,其命令格式是: UPDATE <表名> SET <字段名>=<表达式>[,<字段名2>=<表达式2>...][WHERE <条件>]。同replace 命令使用时一样,NULL不区分大小写,NULL前后的两个小圆点也可以省略,在SQL语句中,用WHERE子句指定需要更新记录的条件,而且在一条语句中可以更新多个字段,只需要用逗号分开即可,和replace命令不同的时,如果没有WHERE子句,则更新所有记录,而且对表进行操作时,不需要把表打开,只需要保证该表在Visual FoxPro的默认目录中即可。例如:把“学生档案表”中学号为20190205这条记录的“班级”字段值设为空,命令为:UPDATE 学生档案表 SET 班级=NULL WHERE 学号=“20190205”。如果输入命令UPDATE 学生档案表 SET 班级=NULL则是把所有记录的“班级”字段值设为空值。
  第四种方法:SQL语句中的INSERT命令。INSERT命令的功能是插入记录,也可以输入NULL值。其命令格式是:INSERT INTO 表名[(字段名1[,字段名2,...])]VALUES(表达式1[,表达式2]),它的功能是在指定数据表的末尾添加一条新记录。用该命令插入记录时,就可以插入字段值为空的记录。使用该命令的时候要注意:表达式与字段的数据类型、位置和个数都要一致,若省略字段名表,则默认为表中所有字段和表结构中的字段顺序,而且该语句一次只能追加一条记录。如果要插入一条学号为20190207的记录,班级还不确定的记录,则命令应为:INSERT INTO 学生档案表(学号,姓名,性别,出生日期,入学成绩,班级,住校否)values(“20190207”,“李广明”,”男”,{^1988/12/05},502.00,NULL,.f.)
  需要说明的是,在数据表中,不是所有字段都能设置空值。如果表中的字段被设置成为了主索引或候选索引,该字段就不允许为空,因为主索引和候选索引不允许字段有重复值,要求字段值都是唯一的。反过来,如果我们先前就对某一字段进行设置,允许接受空值,则该字段将不能被设置成为主索引或候选索引,当然,我们也正好可以利用主索引和候选索引的这个特点,来判定空值是否设置成功。
  参考文献:
  [1] 潘娜,毛宇光,韩波;SQL语言中的空值问题[J];微机发展;2004年12期.
  [2]杨丽.Visual FoxPro 6.0中的空值问题[J].才智,2009(23):80.
  [3]张国团.Visual FoxPro中的空值(NULL值)问题[J].吉林师范大学学报(自然科学版),2005(01):105-106.