Jet的IsNull()同T-SQL的COALESCE()函数之间的区别

ZDNet软件频道 时间:2003-08-29 作者:ZDNet China |  我要评论()
本文关键词:
空值是Access和SQL服务器的开发人员所特有的问题。尽管通过链接表或者ADP文件,Access经常被用作SQL服务器的前端,但是这两个系统并没有使用同一个函数来处理空值。
本文译自Builder.com,未经许可请勿转载如果无法预测到可能的空值(null value)并正确地处理它们,那将会导致运行错误,甚至更严重的是,数据的错误——你恐怕不希望你的用户和客户碰到这两种情况吧。

空值是Access和SQL服务器的开发人员所特有的问题。尽管通过链接表(linked table)或者ADP文件(Access的项目),Access经常被用作SQL服务器的前端,但是这两个系统并没有使用同一个函数来处理空值。是否知道使用正确的函数就意味着客户满意和客户抛弃你的区别。

处理Access的MDB文件里的空值

在MDB数据库里查找空值的时候,Jet支持下列函数:

  • 在标准表达式(criteria expression)和SQL的WHERE子句里使用Is Null。
  • 对Visual Basic for Applications(VBA)使用IsNull()函数。


一旦你碰到了空值,就要使用Nz()函数、IIF()函数和VBA的If statement来处理它。IIF()这个函数对于查询和标准表达式很有用。要在模块里使用VBA的If statement,而Nz()函数能够用在任何地方。

假设你想要在Northwind雇员(Employees)表格里找到空(Null)的 Region值,你可以使用下面这两个表达式中的一个:
Reg: Nz([Region],"N/A")
Reg: IIf(IsNull([Region]),"N/A",[Region])


如果在地区(Region)字段里存在空值,那么这两个表达式就会返回一个无效(N/A)字符串,如A所示。

A

获取空值,并返回更详尽的内容


真的没有什么理由要使用IIF(),除非你想要在被检测的值本身非空时返回这个值之外,还想返回某些东西。例如你不希望返回地区的值,而想要返回华盛顿(Washington)的值。在这种情况下,Nz()函数就无法使用了,因此就要改用下面的IIF()函数:
IIF(IsNull([Region], "N/A", "Washington)

(要获得同样的结果,你就要在VBA模块里使用If statement。)

在用在VBA模块里的时候,你可能要在SQL WHERE子句里使用Is Null找到空值,或者在这些空值导致错误之前使用Nz()来发现它们。例如,通过只包括进地区值是空的记录,下面的过程会过滤掉雇员表单的recordset:
DoCmd.OpenForm "Employees",,, "Region Is Null"

编写良好的代码不会忽略掉空值,而是会处理它们。例如,Listing A里的过程显示了每个雇员的地区值。如果不存在任何值的话,所给出的提示信息顶多就是令人不解的,如B所示。图B左边的对话框显示的是当你没有处理地区字段里可能的空值时的过程;图B右边的对话框显示的是如果处理这些空值会带来的结果。如果地区的值不存在,那么Nz()函数就会返回N/A无可用字符串,而不会什么都不返回。

 

B

不处理空值会导致人无法理解

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134