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