如何在 Access 2007 中使用 VBA 保存 SQL COUNT 查询的结果?

and*_*ewb 5 sql ms-access vba ms-access-2007 count

我正在尝试计算表中满足特定条件的记录数。我更喜欢使用 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
Run Code Online (Sandbox Code Playgroud)

是的,我知道,我在表和字段名称中使用了空格 - 我会更改它。尽管我认为我仍然应该能够按原样运行此查询,所以我现在将其保留原样。

当我运行上面的代码时,我收到运行时错误 3464 - 标准表达式中的数据类型不匹配。我的以下 dcount 函数工作正常:

count = DCount("[Engagement Letter ID]", "Engagement Letters", "[Client ID] = " & Me.cboSelectClient)
Run Code Online (Sandbox Code Playgroud)

以下没有 WHERE 的 COUNT 查询也可以正常工作:

"SELECT COUNT(*) FROM `Engagement Letters`"
Run Code Online (Sandbox Code Playgroud)

我对 SQL 的了解非常少,对更高级的 VBA 的了解也非常少,所以我不确定我哪里出了问题。谁能帮我这个?

Han*_*sUp 1

尝试像这样构建你的字符串。

countString = "SELECT COUNT(*) FROM [Engagement Letters]" & vbCrLf & _
"WHERE [Client ID] = " & Me.cboSelectClient
Debug.Print countString
Run Code Online (Sandbox Code Playgroud)

使用方括号括住对象(表和字段)名称,其中包含空格或除字母、数字和下划线字符之外的任何字符。

对于表名称,您使用了“Engagement Letters”,并且反引号的作用与方括号相同。也许它们总是工作得同样好,但我不确定,因为我只使用括号。括号而不是反引号可能会帮助您避免这个错误......

WHERE 'Client ID' = " & Me.cboSelectClient
Run Code Online (Sandbox Code Playgroud)

...这要求数据库引擎将文字字符串"Client ID"与您从 中提取的数值(?)进行比较cboSelectClient

我在语句vbCrLf的两个部分之间使用SELECT,因为我发现在检查完整的字符串时(通过Debug.Print)很方便。