2013-06-12 90 views
0

这似乎应该是一个相对简单的任务,但我已经用几种不同的方法解决了这个问题,目前为止没有运气。如何在Access文本框中显示不同的计数?

我有两个表格:人员和地址。我有一个带有recordource的表单,它是连接这两个表的查询。我想要做的是标题显示“该数据库目前包含[txtPersonCount]个人在[txtAddressCount]地址。”

由于人键和地址关键是它们各自的表内不同的我首先想到的是简单地在文本框控件设置为=Count([tblPeople].[PersonID])=Count([tblAddress].[AddressID])

奇怪的是,使用此方法在两个文本框中都会显示地址ID的计数。我假设发生了什么事,而不是从相应的表中计数ID,这些ID是从表单的记录源后面的查询中计算出来的(对于这些记录源,地址比人们多,所以这很有意义)。

然后我试图通过宣布我的SQL查询作为一个字符串基本上做的是同一件事:

Dim sql As String 
sql = "SELECT COUNT(tblPeople.[PersonID]) FROM tblPeople;" 

Forms![frmBrowse].[txtPersonCount].ControlSource = sql 

但这只会让文本框中显示查询的文本。将字符串更改为"=SELECT COUNT...."没有区别。

关于如何解决这个问题的任何想法?

+0

在ADODB记录集上执行sql并将记录集作为controlsouce传递,因为我不认为evaluate()会在这里工作 – 2013-06-12 15:21:24

+0

我不知道该怎么做。你可以建议的任何链接,所以我可以学习如何? – SELECTCOUNTSTAR

回答

0

Here's a link根据Select语句中的参数循环选定的记录。它使用记录集中的.RecordCount,但踢球者必须首先访问记录器(因此循环)。

1

您已经创建了您的SQL字符串,但是直到您执行它或将其绑定到记录集时,您将无法使用结果。

'Create a connection to your database 
Dim db As DAO.Database 
Set db = CurrentDb() 

'Create a record set that will let you access values from your query 
Dim rs As DAO.Recordset 
Set rs = db.OpenRecordset("SELECT COUNT(tblPeople.[PersonID]) as NumOfPeople FROM tblPeople;") 

'You don't want to change the control source because that is the property of where the value will be stored. You want to change the value of the text box. 
Forms![frmReports].[Text144] = rs!NumOfPeople 

'Close the connection and recordset 
rs.Close 
db.Close 
Set rs = Nothing 
Set db = Nothing 
+0

太棒了,完美无缺!不仅如此,还要感谢清晰明了的评论,以便我将来可以复制这些内容用于其他用途。非常感谢帮忙。试图upvote你,但它说我需要15代表。当我能够时,请确保回来,并upvote。 – SELECTCOUNTSTAR

1

我只会在不会忽略表使用的人表DCount("*","People")功能,
DCount("*","Addresses")。对我来说,似乎比试图在JOIN上创建DISTINCT COUNT更快更明智。
如果您确实需要DISTINCT COUNT,则必须使用棘手的Crosstab查询。
我发布了一些东西here(法语)和罗杰的访问博客比较4 ways to do this

+0

啊,只是试了一下,它也很完美。 – SELECTCOUNTSTAR

相关问题