我正在尝试计算表中符合特定条件的记录数。我的偏好是使用SQL,而不是Dcount,因为我想在SQL上做得更好。这是我目前的代码:
Dim countString As String
Dim count
countString = "SELECT COUNT(*) FROM `Engagement Letters` WHERE 'Client ID' = " & Me.cboSelectClient
count = CurrentDb.OpenRecordset(countString).Fields(0).Value
是的,我知道,我在表格和字段名称中使用了空格 - 我会改变它。虽然我认为我仍然可以按原样运行此查询,所以我现在将其保留原样。
当我运行上面的操作时,我得到运行时错误3464 - 条件表达式中的数据类型不匹配。我已经将下面的dcount函数正常工作了:
count = DCount("[Engagement Letter ID]", "Engagement Letters", "[Client ID] = " & Me.cboSelectClient)
以下没有WHERE的COUNT查询工作正常:
"SELECT COUNT(*) FROM `Engagement Letters`"
我对SQL的了解非常少,而且我对更高级VBA的了解也很少,所以我不确定我哪里出错了。任何人都可以帮我这个吗?
答案 0 :(得分:1)
尝试像这样构建字符串。
countString = "SELECT COUNT(*) FROM [Engagement Letters]" & vbCrLf & _
"WHERE [Client ID] = " & Me.cboSelectClient
Debug.Print countString
在对象(表格和字段)名称周围使用方括号,其中包括空格或除字母,数字和下划线字符以外的任何字符。
对于表名,您使用了“Engagement Letters”,并且反引号看起来与方括号相同。也许他们总是同样工作,但我不确定,因为我只使用括号。括号而不是反引号可能会帮助你避免这个错误......
WHERE 'Client ID' = " & Me.cboSelectClient
...这要求数据库引擎将文字字符串"Client ID"
与您从cboSelectClient
提取的数值(?)进行比较。
我在vbCrLf
语句的两个部分之间使用了SELECT
,因为在检查完成的字符串时(通过Debug.Print
)我觉得很方便。