2016-02-06 39 views
1

我花了半天時間,試圖找出爲什麼會出現一條錯誤消息框數據過濾產生「找不到場」

找不到場「TransactionTypeID」

database

。如果您打開Form1,則使用標題在列TransactionTypeID上應用任何過濾器(例如,取消選中空白),然後嘗試打開第二列的排序/過濾,出現錯誤消息。 如果我將組合框轉換爲文本框或從窗體選擇表Tenants1中刪除,錯誤消失。我使用Access 2010 32位。在這個例子中,我儘可能地簡化了表格,從零開始創建數據庫,導入數據,壓縮/修復都無濟於事。

你有什麼想法嗎?

回答

1

我發現了這個問題。內置的數據表形式的過濾以錯誤的方式工作,如果表連接是這樣的:

SELECT VouchersMain1.VDate, VouchersMain1.TransactionTypeID 
FROM Tenant1 INNER JOIN VouchersMain1 ON Tenant1.TenantID = VouchersMain1.TenantID; 

如果我扭轉表連接方向,內置的過濾工作正常:

SELECT VouchersMain1.VDate, VouchersMain1.TransactionTypeID 
FROM VouchersMain1 INNER JOIN Tenant1 ON VouchersMain1.TenantID = Tenant1.TenantID; 

看起來這是另一個Access錯誤。

另外,感謝@Munsterlander,如果窗體的記錄被保存的查詢,而不是SELECT

0

嘗試將您的字段引用爲Forms!FORMNAME!CONTROLNAME。我假設,根據你寫的內容,你試圖根據組合框中選擇的內容來過濾查詢。

+0

「引用」下的含義是什麼?表單根本不包含任何代碼。是的,我試圖根據組合框中選擇的內容來過濾查詢。其他數據庫中的類似查詢正常工作。 –

+0

編輯您的查詢。在您的字段下方的條件框中,您需要鍵入我寫的內容,但使用表單名稱和控制名稱的組合框名稱。這樣,查詢就可以找到你的控制。錯誤是說它無法找到指定的控件,因爲您必須通過長名稱引用它。 – Munsterlander

+0

我下載了你的數據庫,看到沒有錯誤。按_Filter_過濾器,再次按下不過濾器。 – Gustav

0

從窗體記錄刪除表Tenants1(此表是沒有必要的,在結果查詢不公開場)代替問題就消失了。

您還會注意到您的記錄源已設置(通過Access)ReadOnly(壞設計,沒有聯接定義)。試着在Tenant1表中添加一些記錄,說David和Nathan。

您會發現現在您的查詢將輸出6條記錄(而不是2條),因爲查詢(無連接)爲表Tenant1(3)的所有記錄列出一行,併爲表VouchersMain1的每個記錄列出一行(2),總共2 * 3 = 6行。

+0

這只是具有兩個以上表格的相當複雜的查詢的簡化變體,所有表格都已加入並且選擇返回數十個字段,包括租戶。當我顛倒這兩個表之間的連接時,整個查詢工作正常。 –

+0

好的,很好。我下載了你的數據庫,並且在你的兩個表之間沒有定義連接... – Cisco