设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3430|回复: 7
打印 上一主题 下一主题

[Access本身] 【Access小品】搞球不清 -- Null的概述

[复制链接]
跳转到指定楼层
1#
发表于 2015-5-28 16:25:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  版友三个太阳同志用了一个IF me.Text0=Null Then这样一个判断,没有能得到正确的结果。于是告诉他应该写做:IF isnull(me.Text0) Then。本来这个问题的解答就此该结束,但三个太阳同志继续问他的写法为什么是错的。这就使得问题复杂化了,因为对此问题我也没全然搞清楚。

  三个太阳同志的问题关乎Null,而Null就是一个搞球不清的东西。Null不是字符串空,也不是数字0,而是值不确定状态,对Null的通俗理解就是搞球不清。1和1可以比较,1和2也可以比较。但是两个搞球不清是无法比较的,两个不确定也是无法比较的。所以Null与Null当然也就无法构成一个逻辑表达式了。当文本框中没有填写任何东西时,看起来它是空,实际需要将其理解为不确定。所以当文本框没有填写任何东西时它是Null,但它却不能与Null这个字面量进行比较。

  实际上在不同程序语言中,关于Null还是有些差异的。在网页的脚本语言JavaScript中,存在Undefined类型和Null类型,VBa中的Null似乎比较接近JavaScript中Undefined类型。在类C语言中(C、Java等),Null表示一个空对象指针,在类B语言中则是用Nothing来表示。无论如何Null总是琢磨不定和难以理解的。

  好在我们通常不大需要深入的理解Null是什么,而主要是需要判断是不是Null了。在这个层面上,我们可以混淆一些概念,并知道不同的情况下的判断怎么去处理。一般来讲在Vba中,我们能对控件的取值是否为Null进行判断,我们可以用Isnull这个函数进行。而在控件的有效性规则属性中,我们需要写成Is not Null。在查询中我们通常也Is Null。如果你对这些都感到不可理解,你还可以用Nz函数将Null转换为一个确定的值,然后进行比较。

  除了判断外,我们是可以用Null进行某些赋值处理的。比如我们可以为控件的值赋值为Null,或者对某个数据表字段更新查询为Null。不过你如果试图给一个内存变量赋值Null,那是通常是会出错的,除非这个内存变量的类型为Variant。如果这个变量是Object,比如窗体变量、控件变量等,我们可以给它们赋值Nothing,以释放它们。

  综上所述,Null就是个搞球不清,既然是搞球不清,也就不必去刻意地搞清楚。大概齐知道怎么回事,怎么处理就行了。


本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅
2#
发表于 2015-5-28 16:40:42 | 只看该作者
嗯,定义广泛
3#
发表于 2015-5-28 17:21:18 | 只看该作者
按我理解,Null为真空(当然不是空字符串了)。既然是真空,那就是什么都没有,数据类型自然算是不确定了。两个不确定类型的数据,是无法比较的。因此“Null=Null”是不可能返回TRUE的,同样地,Null+Null当然也不会返回数值了。
就好比:一头猪+一头牛,不能算是2吧?
4#
发表于 2015-5-28 20:51:18 | 只看该作者
深!!!
回复

使用道具 举报

5#
发表于 2015-6-22 09:02:45 | 只看该作者
有时我会用 if len(me.Text0)>0 then 代替 if isnull(me.Text0)=true then
空值不好比较,它是一个变体。
6#
发表于 2016-4-20 10:38:24 | 只看该作者
ROYCH 比喻不错呀  就好比:一头猪+一头牛,不能算是2吧? 是两种动物呀!

点击这里给我发消息

7#
发表于 2016-4-20 11:30:47 | 只看该作者
Null = Null 返回 Null ,不会返回True或False
8#
发表于 2016-8-14 17:28:03 | 只看该作者
roych: 按我理解,Null为真空(当然不是空字符串了)。既然是真空,那就是什么都没有,数据类型自然算是不确定了。两个不确定类型的数据,是无法比较的。因此“Null=Nul ...


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-1 21:27 , Processed in 0.085314 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表