2017-07-20 47 views
1

我想在下面的代码找到first null值。我可以使用选择的位置,但它会删除非空值。我想保留整个记录集,这样我就可以使用rs.AbsolutePosition向用户报告哪一行是空的。我基本上已经设置它来将用户在临时表中输入的信息与另一个表进行比较。如果匹配的字符串在那里出现,否则在记录集上应该为空。VBA访问 - FindFirst空值

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 

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

+0

尝试'strIsN =“[String]为空'' – Andre

+0

不起作用,甚至不会触发不匹配。当我使用该SQL创建一个选择查询时,有3个结果,2个为空。 – Jaehaerys68

+0

我也尝试过IsNull(string)='True'作为字符串,它不接受匹配,但仍然不起作用 – Jaehaerys68

回答

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"可能会稍微好一点。

+0

啊谢谢!不能相信我做到了,并发布了它。我所有的其他发现都有。我会责怪自己很累。 – Jaehaerys68