【问题标题】:VBA Access - FindFirst Null ValueVBA 访问 - FindFirst Null 值
【发布时间】:2017-07-20 12:32:50
【问题描述】:

我正在尝试在以下代码中查找第一个空值。我可以在选择中使用 where 但它会删除非空值。我想保留整个记录集,以便我可以使用 rs.AbsolutePosition 向用户报告哪一行为空。我基本上已经将它设置为将用户在临时表中输入的信息与另一个表进行比较。如果匹配的字符串在那里,它就会出现,否则在记录集上应该为空。

strSQL = "SELECT Tbl_Temp.ID, Tbl_List.String FROM Tbl_Temp LEFT JOIN Tbl_List ON Tbl_Temp.string = Tbl_List.string"
Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
strIsN = "IsNull(string)"

rs.FindFirst strIsN
    If rs.NoMatch Then
        MsgBox "no null values"
    Do While Not rs.NoMatch
        MsgBox "Found null" & rs.AbsolutePosition
        rs.FindNext strIsN
    Loop
    rs.FindNext strIsN
End If

它现在基本上什么都不做。甚至不会触发错误或不匹配。我做错了什么?

【问题讨论】:

  • 试试strIsN = "[String] Is Null"
  • 不起作用,甚至不会触发不匹配。当我使用该 SQL 创建一个选择查询时,有 3 个结果,其中 2 个为空。
  • 我也试过 IsNull(string) = 'True' 作为字符串,它触发了不匹配但仍然不起作用
  • 请记住,AbsolutePosition 是基于 0 的,并且会根据您对记录集的排序方式而改变。我认为返回主键值会更好,因为它是该记录所独有的并且不会改变。

标签: vba ms-access


【解决方案1】:

您的代码缩进已关闭,欺骗了您和我。

这就是你想要的——你错过了Else

RS.FindFirst strIsN
If RS.NoMatch Then
    MsgBox "no null values"
Else
    Do While Not RS.NoMatch
        Debug.Print "Found null " & RS.AbsolutePosition
        RS.FindNext strIsN
    Loop
End If

请阅读How to debug VBA code,单步执行您的代码会立即发现问题。

"IsNull(string)""[String] Is Null" 都可以,但"[String] Is Null" 的性能可能会好一些。

【讨论】:

  • 啊,谢谢!不敢相信我这样做并发布了它。我所有的其他发现都有其他的。我要怪我累了。
猜你喜欢
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多