4

我正在尝试计算表中满足特定条件的记录数。我的偏好是使用 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 的了解也非常少,所以我不确定我哪里出错了。谁能帮我这个?

4

1 回答 1

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)。

于 2012-07-17T00:24:14.587 回答