我正在使用MS Access 2007。
A: DCount("[Name]","[Main]","[Name] = 'Mark'")/
DCount("[Entry]","[Main]","[Entry] = 1")
好的,所以我基本上计算名为Mark的人数,我将其除以数据库中= 1的Entry数。这很容易,但我正在尝试应用第三个条件,其中
[位置]![城市] ='芝加哥'
,但Access并没有让我这样做(它找不到表格,即使它在我上面指定的表格中。
DCount("[Name]","[Main]","[Name] = 'Mark' AND [Location]![City] = 'Chicago'")/
DCount("[Entry]","[Main]","[Entry] = 1")
我还尝试在设计视图中使用Where子句过滤城市,但是在上面的计算之后正在应用条件,因此无论城市如何,计算都是相同的。我只需要它来执行芝加哥市的上述计算。
DCount可以这样吗?
另外,如果你能告诉我如何按城市分组,我会死一个快乐的男人在分别执行每个人的计算时,但如果有人能告诉我如何做第一个,我也会非常感激方式也是。
由于
答案 0 :(得分:1)
什么是[位置]![城市]?我的答案是基于它在名为Location的表中引用名为City的字段的假设。
如果这是正确的,我认为你的问题是因为你试图根据你告诉DCount使用的不属于域([Main]的一部分的字段来指定条件。
从Microsoft's Documentation开始,域名为“一个字符串表达式,用于标识构成域的记录集。它可以是不需要参数的查询的表名或查询名。 “
因此,如果您希望DCount 条件引用两个表中的字段,请将查询形式的表合并到一个“域”中。也许您的查询可能是这样的,“qryMainWithCity”:
SELECT m.[Name], m.Entry, m.City_ID, l.City
FROM
Main AS m
INNER JOIN Location AS l
ON m.City_ID = l.City_ID;
如果该查询适用于您的情况,您应该能够通过这样的DCount表达式得到您想要的内容:
DCount("*","qryMainWithCity","[Name] = 'Mark' AND City = 'Chicago'")
答案 1 :(得分:1)
我刚刚发布了与@ HansUp相同的答案。我有另一种方法可以做到这一点,那就是使用即时记录集查找:
Dim varReturnValue as Variant
varReturnValue = CurrentDB.OpenRecordset("SELECT Main.[Name] FROM Main INNER JOIN Location ON Main.City_ID = Location.City_ID WHERE Main.[Name] = 'Mark' AND Location.City = 'Chicago';")(0)
返回记录集中返回的第一个字段(索引从零开始)。这样您就不必保存查询。