如何使用Access中的VBA查找具有空字段值的记录?

时间:2018-04-25 06:02:28

标签: vba access-vba

我对VBA在表/数据表中查看空字段值的方式感到有点困惑,因为我正在尝试使用Recordset.FindFirst方法在我的数据表中查找记录,但是如果记录包含字段这是空的,它找不到记录。

例如,这是我的表格的样子:

FieldOne   FieldTwo
123        SomeName1
456        
789        SomeName2

对于记录456FieldTwo中的值为空。 FieldOneFieldTwo的数据类型为短文

假设myDatasheet与上述表格挂钩,并附上提到的记录。

我试图像这样找到记录123

Dim crit As String
crit = "FieldOne = '" & Me.textBoxOne & "' And " & _
       "FielTwo = '" & Me.textBoxTwo & "'"

With myDatasheet.Form
    .RecordsetClone.FindFirst crit 

    If Not .RecordsetClone.NoMatch Then
        MsgBox "FOUND"
    Else
        MsgBox "NOT FOUND"
    End If
End With  

Me.textBoxOne123的值Me.textBoxTwoSomeName1中的值FOUND,我得456

但是,如果我尝试使用Me.textBoxOne作为456Me.textBoxTwo作为""找到记录NOT FOUND,则会得到16.3.2

我的代码必须存在语法错误。正确的标准应该是什么?

感谢。

1 个答案:

答案 0 :(得分:0)

Null与空字符串不同。您的“空”字段可能为Null,并将NullNull中的任何字符串结果进行比较,后者将被解析为False

虽然你可以添加一些逻辑来检查你的表单字段是空还是空字符串,然后在条件中使用Is Null,就像KostasK建议的那样,有一个简单的解决方法:只连接一个零长度的字符串到你的领域。这将导致Null值变为零长度字符串,使它们通过比较:

crit = "FieldOne = '" & Me.textBoxOne & "' And " & _
       "FielTwo & '' = '" & Me.textBoxTwo & "'"

请注意,这将使任何索引无效,这可能会在非常精选的情况下导致性能问题。