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

时间:2012-07-17 00:08:00

标签: sql ms-access count ms-access-2007 access-vba

我正在尝试计算表中符合特定条件的记录数。我的偏好是使用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的了解也很少,所以我不确定我哪里出错了。任何人都可以帮我这个吗?

1 个答案:

答案 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)我觉得很方便。