Office中国论坛/Access中国论坛
标题:
【Access小品】搞球不清 -- Null的概述
[打印本页]
作者:
todaynew
时间:
2015-5-28 16:25
标题:
【Access小品】搞球不清 -- Null的概述
版友三个太阳同志用了一个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就是个搞球不清,既然是搞球不清,也就不必去刻意地搞清楚。大概齐知道怎么回事,怎么处理就行了。
作者:
风中漫步
时间:
2015-5-28 16:40
嗯,定义广泛
作者:
roych
时间:
2015-5-28 17:21
按我理解,Null为真空(当然不是空字符串了)。既然是真空,那就是什么都没有,数据类型自然算是不确定了。两个不确定类型的数据,是无法比较的。因此“Null=Null”是不可能返回TRUE的,同样地,Null+Null当然也不会返回数值了。
就好比:一头猪+一头牛,不能算是2吧?
作者:
sxgaobo
时间:
2015-5-28 20:51
深!!!
作者:
accben
时间:
2015-6-22 09:02
有时我会用 if len(me.Text0)>0 then 代替 if isnull(me.Text0)=true then
空值不好比较,它是一个变体。
作者:
purplerose
时间:
2016-4-20 10:38
ROYCH 比喻不错呀 就好比:一头猪+一头牛,不能算是2吧? 是两种动物呀!
作者:
轻风
时间:
2016-4-20 11:30
Null = Null 返回 Null ,不会返回True或False
作者:
woshinide
时间:
2016-8-14 17:28
roych: 按我理解,Null为真空(当然不是空字符串了)。既然是真空,那就是什么都没有,数据类型自然算是不确定了。两个不确定类型的数据,是无法比较的。因此“Null=Nul ...
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3