设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2167|回复: 5

[Access本身] 容易被误解的Null

[复制链接]

点击这里给我发消息

发表于 2015-7-10 10:12:27 | 显示全部楼层 |阅读模式
本帖最后由 盗梦 于 2015-7-10 10:17 编辑

在查询中,Null 是不参与字符运算。
因为它不是字符。(这句话好冷~)

这个是看到一个网友的求助才发现的。
他有这么一个表(我们就不要吐槽他的表设计了):

然后他建了一个查询,查询如下:



他要找开头不是 J2015060113-02 的记录。
看上去条件是没错的,但是却得不到任何结果,和预想的结果相差太多了。

原因就是like条件判断是只判断字符串的。而其中没有数据的记录,该值是null,所以才查询不到。
把条件改成  Null  or  Not  Like "J2015060113-02*"   即可。
建议,表设计的时候,出于优化考虑,文本型字段默认值设为 "" ,避免出现null。


在vba中,Null 也不参与字符运算
它本来就不是字符! (Null:冤啊~)

常见错误:判断一个文本框是否为空
错误代码:If  文本框 = ""  then

上面的写法,如果文本框没东西的话,就会提示错误
这个文本框不填东西的时候,值是null。null不是空字符串。
正确写法1:If  nz(文本框)="" then
正确写法2:If  len(文本框)=0 then

nz函数是用于转换null值为其他值,没写其他值,就默认空字符串。
null值长度为0,所以也可以用len函数处理。


总结
Null是一种值类型,不是字符串类型。
Null 不等于 "" (空字符串)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2015-7-10 10:36:33 | 显示全部楼层
{:soso_e100:}学习!!!

点击这里给我发消息

发表于 2015-7-10 12:48:53 | 显示全部楼层
NULL本来就不是字符,说得没错。

点击这里给我发消息

 楼主| 发表于 2015-7-10 12:51:52 | 显示全部楼层
轻风 发表于 2015-7-10 12:48
NULL本来就不是字符,说得没错。

扫盲贴
发表于 2015-7-10 13:05:04 | 显示全部楼层
本帖最后由 ganlinlao 于 2015-7-10 13:11 编辑

菜鸟弱弱的理解:
Null是一种说不清楚的状态

这在哲学上有一种很玄的概念叫“虚无"
在指针上,Null一般用来表示空指针,也就是vbnullptr
空指针是指一个指针变量指向的内存地址不存在
在查询中,Null就是指返回值是空指针,也就是返回值是不存在
因为在VBA中没有定义vbnullptr=0,所以access提供一个Nz()函数。
为什么会这样?
因为vba是不允许明面上使用指针操作。但recordset却是一个必须依赖指针操作的而access没有recordset几乎就失去了
存在的意义,所以只有access提供了Nz(),excel和word是不提供的(当然可以用别的方式来实现)。

站在这个角度,可以很容易看出,sub过程就是一个返回值为Null的fucntion

Null在字符串的表现,很容易让人一头雾水的
空字符串是字符串。它有一个真正的名字vbnullchar
Null在字符串的真正的名字叫vbnullstring。

点击这里给我发消息

 楼主| 发表于 2015-7-10 13:12:07 | 显示全部楼层
ganlinlao 发表于 2015-7-10 13:05
菜鸟弱弱的理解:
Null是一种说不清楚的状态
这在哲学上有一种很玄的概念叫“虚无"

就是什么都没有。哈哈。空字符串至少还是一个字符串
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 15:40 , Processed in 0.109201 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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