我正在尝试计算表中满足特定条件的记录数。我更喜欢使用 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 的了解也非常少,所以我不确定我哪里出了问题。谁能帮我这个?
尝试像这样构建你的字符串。
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
.
I used vbCrLf
的 2 个部分之间SELECT
声明,因为我发现在检查完整的字符串时很方便(通过Debug.Print
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)