当表中的字段为Null时,DLookup和Nz()的格式是什么?

时间:2019-01-18 20:07:23

标签: vba ms-access access-vba ms-access-2010

我有一个DLookup公式,该公式从MyTable中获取[Model]。一切正常,直到字段名称[Model]的值为空白。

我收到一个运行时错误94,说明它不了解空信息。

我尝试使用Nz()函数。当我有太多双引号和单引号时,使用这些功能会造成混淆。

这就是我所拥有的。

Dim other as String
other = DLookup("[Model]", "[Part Number & Part Name]", "[Part Number]='" & Forms![Press 2]![Containment - Press 2 subform].Form![Part Number] & "'")

If other <> "" Then
    Me.[Model].Value = other
Else
    Me.Model.Value = "NA"
End If

2 个答案:

答案 0 :(得分:0)

您的代码中有两个棘手的空值位置:

  1. 如果Forms![Press 2]![Containment - Press 2 subform].Form![Part Number]为空,则DLookUp将被错误地处理,因为您将其包含为字符串。

    修复:使用表单值作为参数,这还可以避免SQL注入错误:

    other = DLookup("[Model]", "[Part Number & Part Name]", "[Part Number]= Forms![Press 2]![Containment - Press 2 subform].Form![Part Number]")
    
  2. 您正在将DLookUp结果存储在字符串中。您可以在此处使用Nz返回不同的字符串,也可以将零长度的字符串与DLookUp的结果连接起来,以将Null值作为零长度的字符串进行处理:

    other = VbNullString & DLookup("[Model]", "[Part Number & Part Name]", "[Part Number]= Forms![Press 2]![Containment - Press 2 subform].Form![Part Number]")
    

这应该涵盖null可能干扰这部分代码的所有地方。

答案 1 :(得分:0)

使用 Nz 并减少代码:

Dim other as String

other = Nz(DLookup("[Model]", "[Part Number & Part Name]", "[Part Number]='" & Forms![Press 2]![Containment - Press 2 subform].Form![Part Number] & "'"), "NA")   
Me![Model].Value = other