2

我对 VBA 的条件运算符感到困惑。它可能与奇怪的类型转换有关,但我被卡住了,需要一些帮助 -

query = "SELECT * FROM [records_table] " & _
    "WHERE [po_number] = " & Chr(39) & po_number & Chr(39) & ";"

Set rec_set = data_base.OpenRecordset(query)
MsgBox rec_set.Fields("po_ack")
If rec_set.Fields("po_ack") <> Null Then _
    po_ack = True
If rec_set.Fields("po_ack") = Null Then _
    po_ack = False

现在,这应该返回 true,但它返回 false?当我 msgbox 记录集值时,我得到“11/12/2012”,但是当我 msgbox 函数返回时,它是 false?

po_ack 存储一个日期值,这个特定的值是“2012 年 11 月 12 日”,那么为什么当我检查它是否为空时,它说“2012 年 11 月 12 日”== 空?

提前感谢您的帮助!

4

2 回答 2

3

Null 永远不等于任何东西,甚至不等于另一个 Null。

Null 永远不等于任何东西,甚至不等于另一个 Null。

使用该IsNull()函数来检查某物是否为 Null。

If IsNull(rec_set!po_ack) = False Then
    po_ack = True
Else
    po_ack = False
End If

看看该IsDate()功能是否对您想要做的事情有用。以下是从立即窗口复制的一些示例表达式。

? IsDate(Null)
False
? IsDate(Now())
True
? IsDate("2012-11-12")
True
? IsDate("No way, dood")
False
于 2012-11-12T18:51:56.087 回答
1

先生,我认为您应该看看下面列出的链接。NULL和 VB中Nothing的空白值之间存在巨大差异。Null是未知数,因此它不等于,1或其他任何值。永远不要将变量与 null 进行比较,因为它会导致不正确的逻辑。检查您是否混淆了这些类型。TRUE""

http://www.techrepublic.com/article/learn-the-differences-between-is-null-and-isnull-in-access/5034252

http://www.everythingaccess.com/tutorials.asp?ID=Common-Errors-with-Null

http://www.tek-tips.com/faqs.cfm?fid=3710

于 2012-11-12T18:53:50.920 回答