布尔值使用If语句VBA访问时遇到问题

时间:2012-11-12 18:38:35

标签: sql vba ms-access-2010

我对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返回该函数时,它是假的?

po_ack存储一个Date值,这个特定值的值是“11/12/2012”,那么为什么当我检查它为null时,它说“11/12/2012”== null?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

Null永远不会等于任何东西,甚至不是Null。

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

使用IsNull()函数检查某些内容是否为空。

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

答案 1 :(得分:1)

先生,我想你应该看看下面列出的链接。 NULLNothing与VB中的空白值之间存在巨大差异。 Null是未知的内容,因此不等于1TRUE""或其他任何内容。切勿将变量与null进行比较,因为它会导致逻辑错误。检查您是否混淆了这些类型。

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