如何在VBA DAO记录集中检查null?

时间:2009-03-19 21:30:55

标签: vba ms-access null access-vba dao

我在数据库中有一个可选字段,我使用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值抛出。我更愿意做更直接的事情,但这是我能想到的最好的事情。

6 个答案:

答案 0 :(得分:30)

怎么样:

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

您还可以查看this article,它对Access VBA应用中的Null值以及如何处理它们有一些解释。

答案 1 :(得分:8)

对于你展示的例子,Nz会工作:

    thisMiddleInitial = Nz(rs!MiddleInitial,"")

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

    thisMiddleInitial = rs!MiddleInitial & ""

答案 2 :(得分:2)

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

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

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

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

将此扩展为包括中间内容将如下所示:

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

我认为NoMatch选项在这种情况下可能有效:

如果rs.NoMatch = True则

答案 5 :(得分:0)

我更喜欢使用以下内容来说明Null和Empty字符串值。使用您的表单来收集用户的值是一个很好的检查。

If Trim(rs.Fields("MiddleInitial") & "") = "" then