Ms access 一个对象怎么可以同时为null和notnull?

Ms access 一个对象怎么可以同时为null和notnull?,ms-access,vba,Ms Access,Vba,所以我认为我对VBA编程有一个相当不错的理解,但这让我感到困惑 上下文:我继承的MS Access应用程序的一些VBA编程。此应用程序是FE/BE分离的,BE是存储在网络服务器上的数据库文件 我最初的问题与一个丑陋的异常有关,当时无法打开记录集,在Google先生的帮助下,我选择使用GetAttr方法测试对BE目录的访问 On Error goto ErrConnect a = GetAttr("\\server-name\directory\") If (a <> Null

所以我认为我对VBA编程有一个相当不错的理解,但这让我感到困惑

上下文:我继承的MS Access应用程序的一些VBA编程。此应用程序是FE/BE分离的,BE是存储在网络服务器上的数据库文件

我最初的问题与一个丑陋的异常有关,当时无法打开记录集,在Google先生的帮助下,我选择使用GetAttr方法测试对BE目录的访问

On Error goto ErrConnect

a = GetAttr("\\server-name\directory\")
   If (a <> Null) Then
       MsgBox "is connected"
    ElseIf (a = Null) Then
       MsgBox "not connected"
    Else
       MsgBox "this is interesting..."
   End If

ErrConnect:
    MsgBox "Failed to open remote database at \\server-name\directory\"
    Resume Next
当然,接下来的简历没有任何意义,但我很好奇我的变量a如何可以同时为Null和非Null。。。当然,我总是得到有趣的信息

这不是很奇怪吗


编辑:对于信息,将手表设置为空显示它不是可以执行算术运算的值

? Null = Null 
Null
? Null <> Null
Null
因此,正如您所看到的,您不能对If使用Null。它不会是真的或假的,所以你的理由总是被执行。如果是的话

If a <> 0 Then
    MsgBox "Connected"
Else
    MsgBox "Not Connected"
End If

那就行了

不在c中。似乎真正将一个值同时存储为null和notnull需要一台计算机存储基于电子状态的数据。然后,它可以为null,并且在您对其求值之前不为null。但是,一旦观察到数据,它将被迫塌陷到一种或另一种状态。

GetAttr返回一个整数,那么为什么要针对Null进行测试呢?你应该做一些数值测试,你是对的。很抱歉,我提供了一些错误的信息:因为我的'GetAttr'调用失败,它引发了一个异常,事实上我的变量'a'是空的,我编辑了这篇文章。这就是为什么我认为我可以通过对“Null”的测试来捕捉到这一点事实上,这是有效的,谢谢。我想避免对0进行测试,因为这是vbNormal的值,但我想这只是一个糟糕的快捷方式。无论如何,Null不是一个可以对其执行算术运算的值。这解释了我对空测试的形而上学的怀疑:不客气。只不过你知道,如果你把变量调暗到合适的类型,那么很多问题是可以避免的。祝你好运