Nz() 绝对是您正在寻找的功能。你说你试过了,它返回了Null,但我觉得这很难相信,因为Nz() 的全部意义在于不返回Null。供参考:
x = Nz(Null, 0) 返回 0 (VbVarType.vbInteger)
x = Nz(Null, "") 返回一个空字符串 (VbVarType.vbString)
x = Nz(Null) 返回一个空变量(VbVarType.vbEmpty,不是 VbVarType.vbNull)
编辑
进一步调查表明,在您的特定情况下,问题是您在查询中执行COUNT(re.rule_status),该查询也执行GROUP BY re.rule_status。如果查询的WHERE 子句导致一个空集(不返回任何行),那么整个查询只是不返回任何行,而不是返回值为 0 或 Null 的单行。
这可以用下面的测试代码来验证...
Sub NzTest()
Dim rst As DAO.Recordset, strSQL As String
strSQL = "SELECT Nz(COUNT(LastName), 0) FROM Members WHERE False GROUP BY LastName"
Debug.Print strSQL
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If rst.EOF Then
Debug.Print "No rows were returned."
Else
Debug.Print "Count = " & rst(0).Value
End If
rst.Close
Set rst = Nothing
End Sub
...产生结果
SELECT Nz(COUNT(LastName), 0) FROM Members WHERE False GROUP BY LastName
No rows were returned.
当GROUP BY 被删除时,我们得到...
SELECT Nz(COUNT(LastName), 0) FROM Members WHERE False
Count = 0
...实际上在这种情况下甚至不需要Nz():
SELECT COUNT(LastName) FROM Members WHERE False
Count = 0