2017-08-03 97 views
0

我有NULL = NULL返回NULL的问题。我希望它返回True。一些研究之后,我发现,我以为会工作线..在Access VBA中处理NULL = NULL比较

set ansi_nulls off

我很快就发现,Access不能识别它。所以在这里我试图在Access中做嵌套条件,这是一个完整的噩梦。

有没有更简单的方法来处理这个问题?

+0

你可以发布你挣扎条件的例子吗?我无法想象如何为NULL添加一个检查会使一个更复杂 – Milk

回答

1

如果你正在做大量的“等于或两个空”的比较,有多种解决方案:

  1. 如果比较数字的时候是用0 = Null导致真OK,或"" = Null比较字符串时导致为true,则可以使用:

    If Nz(Value1) = Nz(Value2) Then

这将替换所有空值与0""依赖在输入类型上。

后果:Nz(Null) = Nz(Null)True0 = Nz(Null)True"" = Nz(Null)True1 = Nz(Null)False"a" = Nz(Null)False

  • 创建用户定义函数来为你做的比较
  • 功能:

    Public Function CompareWithNulls(Value1 As Variant, Value2 As Variant) As Boolean 
        If IsNull(Value1) And IsNull(Value2) Then 
         CompareWithNulls = True 
        Else 
         CompareWithNulls = Value1 = Value2 
        End If 
    End Function 
    

    使用该功能:

    If CompareWithNulls(Value1, Value2) Then

    +0

    我不知道你可以使用'如果Nz(Value1)= Nz(Value2)然后',但它的工作完美。谢谢! – Steven

    0

    可以使用And关键字测试多个条件而不嵌套:

    If IsNull(Value1) And IsNull(Value2) Then 
    

    您可以创建一个到两个变量与空校验比较方法,然后将每个如果只需要改为调用的这个函数通常=

    +0

    问题是我有一个相当大的条件,其中包括永远不会是NULL的值。作为一个例子...'如果streetVal = addressVal AND suiteVal = unitVal THEN'其中'suiteVal'和'unitVal'可以是NULL,但是'streetVal'和'addressVal'永远不会。 – Steven

    +0

    不要为无法为NULL的值添加NULL值检查。但是,如果需要,没有办法检查“NULL”。 – Milk