18

我在使用 DAO 记录集提取的数据库中有一个可选字段。在将其与其他字段连接之前,我需要检查该字段是否已设置。到目前为止,我已经尝试了以下代码片段,Is并且=(这显然是错误的语法[[Is | =]])无济于事。看来,如果我使用=它将无法正确比较,Null如果我使用Is它,它会抱怨它没有与对象进行比较。

While Not rs.EOF
    If rs.Fields("MiddleInitial") [[Is | =]] Null Then thisMiddleInitial = "" Else thisMiddleInitial = rs.Fields("MiddleInitial")
    If prettyName(myLastName, myFirstName, myMiddleInitial) = prettyName(rs.Fields("LastName"), rs.Fields("FirstName"), thisMiddleInitial) Then
        MsgBox "Yay!"
    End If
    rs.MoveNext
Wend

如果有更简单的方法可以做到这一点,我完全愿意接受。prettyName 将 3 个字符串作为参数,最初我只是试图直接传递 rs.Fields("MiddleName") 但它以 Null 值抛出。我宁愿做一些更直接的事情,但这是我能想到的最好的。

4

6 回答 6

37

怎么样:

IsNull(rs.Fields("MiddleInitial").Value)

您还可以查看这篇文章,其中对 Access VBA 应用程序中的 Null 值以及如何处理它们进行了一些解释。

于 2009-03-19T21:37:13.050 回答
8

对于您展示的示例, Nz 可以工作:

    thisMiddleInitial = Nz(rs!MiddleInitial,"")

或者简单地将字符串与空字符串连接:

    thisMiddleInitial = rs!MiddleInitial & ""
于 2009-03-19T22:02:21.413 回答
2

在我看来,Remou 已经回答了您的问题,但在我看来,您可能只是在尝试正确连接名称字段。在这种情况下,您可以在 VBA 中使用 Mid() 和 Null 传播来获得结果。

我不使用单独的中间初始字段,所以我通常的名称连接公式是:

Mid(("12" + LastName) & (", " + FirstName), 3)

如果 LastName 为 Not Null,则开头的“12”字符串将被丢弃,如果null,则将被忽略,因为 + 连接运算符传播 Null。

要将其扩展为包括中间字母,如下所示:

Mid(("12" + LastName) & (", " + FirstName) & (" " + MiddleInitial), 3)

假设您的 UDF 没有对昵称/缩写/等进行某种复杂的清理,在我看来,这可以完全取代它。

于 2009-03-20T00:05:04.350 回答
0

If rst.Fields("MiddleInitial").Value = "Null" Then

这对我有用。我使用 MS SQL 数据库。

于 2014-12-12T19:08:11.580 回答
0

我认为 NoMatch 选项可能适用于这种情况:

如果 rs.NoMatch = True 那么

于 2018-06-29T13:51:12.163 回答
0

我更喜欢使用下面的方法来解释 Null 和 Empty 字符串值。使用表单从用户那里收集值是一个很好的检查。

If Trim(rs.Fields("MiddleInitial") & "") = "" then
于 2018-10-18T01:15:05.973 回答