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

5

我想统计符合特定条件的表格中记录的数量。我更喜欢使用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个回答

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中提取的数值进行比较。

我在SELECT语句的两个部分之间使用了vbCrLf,因为我发现这样方便查看完成的字符串(通过Debug.Print)。


1
没错,你说得对,感谢你的帮助!实际上我在发完这个帖子后不久就解决了它,但是被叫去开会了。虽然我不太明白为什么 [] 起作用而 "" 不起作用,所以你的解释帮了我很大的忙。纠正错误很好,但更好的是获得理解! - andrewb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接