我对VBA在表/数据表中查看空字段值的方式感到有点困惑,因为我正在尝试使用Recordset.FindFirst
方法在我的数据表中查找记录,但是如果记录包含字段这是空的,它找不到记录。
例如,这是我的表格的样子:
FieldOne FieldTwo
123 SomeName1
456
789 SomeName2
对于记录456
,FieldTwo
中的值为空。 FieldOne
和FieldTwo
的数据类型为短文。
假设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.textBoxOne
中123
的值Me.textBoxTwo
和SomeName1
中的值FOUND
,我得456
。
但是,如果我尝试使用Me.textBoxOne
作为456
而Me.textBoxTwo
作为""
找到记录NOT FOUND
,则会得到16.3.2
。
我的代码必须存在语法错误。正确的标准应该是什么?
感谢。
答案 0 :(得分:0)
Null
与空字符串不同。您的“空”字段可能为Null
,并将Null
与Null
中的任何字符串结果进行比较,后者将被解析为False
。
虽然你可以添加一些逻辑来检查你的表单字段是空还是空字符串,然后在条件中使用Is Null
,就像KostasK建议的那样,有一个简单的解决方法:只连接一个零长度的字符串到你的领域。这将导致Null值变为零长度字符串,使它们通过比较:
crit = "FieldOne = '" & Me.textBoxOne & "' And " & _
"FielTwo & '' = '" & Me.textBoxTwo & "'"
请注意,这将使任何索引无效,这可能会在非常精选的情况下导致性能问题。