2013-06-12 22 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

相關問題