VBA Access数据库中Null 空字符 空格 的不同点(区别)详细教程
NULL,可认为变量未赋过值,空是赋过值,但值为空。
Mysql与Access 这个应该是类似的。
VBA Access数据库中Null 空字符 空格 的不同点(区别)详细教程
很多网友在学习ACCESS或通过Excel VBA ADO连接Access数据库 处理过程中,对NULL这个概念总是会非常困惑,感觉很难理解
有时发现Access数据表或Sql Server数据表中明明有这条数据,但用条件就筛选不出来
或明明不需要筛选的结果却出现了。
其实这里主要是因为不了解Null和空字符的区别,这里就来总结一下,希望Access网友及Excel VBA连接数据库的网友有所帮助:
一、关键知识:
如果一个数据表中的字段允许为空的话
1.这个Access数据表的字段在新增记录时,如果还填入内容,那这个字段内容就是NULL
2. 如果填入了内容,但又手工把内容删除了,那它就是有内容了,但内容是空字符
二、 即 NULL 与 "" 是有区别的
1. Null 是完全没有值
2. "" 是有值 ,只是它的内容是 "" 空字符串
三、另 NULL 与 " " 空格也是有区别的
1. Null 是完全没有值
2. " " 是有值 ,它的内容是 " " 空格,占用一个字符
四、筛选与过滤 Where条件
所以如果你用 where 条件 Is Null 来筛选数据,就无法筛选出 内容为 "" 空字符串 和" " 空格的数据
反之,如果在Access中,您用 字段名="" 也无法筛选出 Null 和 " " 空格的数据
1. 如果想筛选Access数据表中 Null 和 "" 空字符串 的数据,可以使用条件
字段名 Is Null or 字段名=""
或者 直接 使用 nz(字段名)=""
2. 如果想筛选Access数据表中 Null 和 "" 空字符串 以及 " " 空格的数据,则可以使用 trim(nz(字段名))=""
五、Access 文本类型字段 数字类型字段与日期型字段的 Null 处理方法的不同
1. 如果是 文本字段 ,则可以这样 nz(字段名) 或 nz(字段名,"") 来将其转换为 空字符
2. 如果是 数字字段 ,则可以这样 nz(字段名) 或 nz(字段名,0) 来将其转换为 空字符
3. 如果是 日期字段 ,则可以这样 nz(字段名) 或 nz(字段名,#1900/01/01#) 来将其转换 ,也可转换为你自己需要的值
六、在Access 或 Excel VBA 行业软件中应用的案例:
由于Access计算过程中,如果在查询中或Sql语句中的字段存在Null值,对此字段进行Sum求和,Avg平均数 等运算,都会导致结果为Null
而Null不同于0 或空字符,任何数与其一起计算,最后结果都是不知道及NUll,为了预防错误,需要对数据先进行预处理,可使用以下方法:
方法一、使用NZ,NZ(value,valueifnull),例子 NZ(数量,null) = 0 , 若某值为NUll, 则转换成0
方法二、利用iif, iif(数量 is null,0, 数量)
仓库:
方案一:用nz函数,如:现存数量=nz(入库总数量)-nz(出库总数量)
方案二:用iif函数,如:iif(入库数量=null,0,入库数量)
人事:
select nz([年龄],0) as [实际年龄] from 人事表
工资:
select nz([应发工资],0)-[应扣项] as [实发工资] from 工资表
七、如果想把Access 数据表中已有的Null 数据更新为 "" 空字符,可以使用以下更新Sql语句
update 表名 set [字段名]='' where [字段名] is null;
例如已经打开了ado连接对象cn
dim strSql as string
strSql="update Office交流网贴子表 set [字段名]='' where [字段名] is null;"
cn.Execute strSql '执行sql语句
或直接
Currentdb.Execute strSql '执行sql语句
八、Sql Server中Null 值的处理方法
使用IsNull函数
select isnull(文章ID,0) from Office交流网文章表
九、数据表设计
如果是数字型 最好在设计表时最好将相关字段设置成不允许空,默认值为0,避免统计时数据出错