我使用的是MS Access 2007。
A: DCount("[Name]","[Main]","[Name] = 'Mark'")/
DCount("[Entry]","[Main]","[Entry] = 1")
好的,所以我基本上是在计算有Mark这个名字的人的数量,我用它除以数据库中的Entry的数量=1。这很容易,但我正在尝试应用第三个条件,即
[位置]![城市]="芝加哥"
,但Access不允许我这样做(它找不到表,即使它在我上面指定的表中。
DCount("[Name]","[Main]","[Name] = 'Mark' AND [Location]![City] = 'Chicago'")/
DCount("[Entry]","[Main]","[Entry] = 1")
我也尝试过在Design视图中使用Where子句过滤城市,但在上面的计算之后应用了该条件,因此无论城市如何,计算都是相同的。我只需要它来为芝加哥市进行上述计算。
DCount有可能发生这样的事情吗?
此外,如果你能告诉我如何按城市分组,同时分别计算每一个,我会很高兴地死去,但如果有人也能告诉我第一种方法,我也会非常感激。
感谢
什么是[Location]![城市]?我的回答是基于这样的假设,即它引用了名为Location的表中名为City的字段。
如果这是正确的,我认为你的问题是因为你试图根据一个字段指定一个条件,该字段不是你告诉DCount使用的域([Main])的一部分。
在Microsoft文档中,域是"一个字符串表达式,用于标识构成域的记录集。它可以是表名,也可以是不需要参数的查询的查询名。"
因此,如果您希望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'")
我刚刚发布了与@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)
返回返回的记录集中的第一个字段(索引是从零开始的)。这样就不必保存查询。