2016-03-01 68 views
1

我有一張表,包含一年中的所有星期(使用客戶端的編號,所以第一週是在六月)以及它們開始的日期。他們可以選擇他們希望查看哪一週的表單,所以我使用了一個ComboBox,它可以捕獲他們在WeeklyHours表中輸入數據的所有星期數字,使用 SELECT Format(WeeklyHours.Week, 「0」)AS Expr1 FROM WeeklyHours GROUP BY WeeklyHours.Week;訪問 - 輸入參數值錯誤

這個組合框然後應該被用作我已經構建的幾個查詢的星期過濾器,使用組合框作爲匹配標準。問題是當窗體關閉時,這些查詢無法運行,併爲組合框值提供輸入參數值錯誤。

爲了解決這個問題,我嘗試用名爲Week_Number的單個條目創建一個名爲SelectedWeek的新表。然後有一些AfterUpdate代碼將選定的組合框值保存到SelectedWeek的Week_Number字段中。

然後,我將查詢更改爲指向[SelectedWeek]![Week_Number],以便查詢將始終使用最近選定的週期。 但是,我不斷收到SelectedWeek!Week_Number的輸入參數值錯誤,我無法弄清楚原因。 任何幫助將不勝感激。

感謝, 喬爾

回答

0

原因會提示用戶輸入參數值(順便說一下,它是不是一個錯誤)是在兩種情況下訪問SQL引擎看不到任何的參考價值。在第一種情況下,表單已關閉,而在第二種情況下,列未正確對齊查找。

在第一種情況下,只需保持表單打開哪個用戶在運行其他查詢時從組合框中選擇值。否則,因爲它是從內存封閉形式的所有內容不調用:

SELECT * FROM TableName WHERE weeknumber = Forms!FormName!WeekNumber 

在第二個方案中,使用域函數族的DLookUp()一部分。

SELECT * FROM TableName WHERE weeknumber = DLookUp("Week_Number", "SelectedWeek") 

真的,域功能可以概括爲在SQL子查詢:

SELECT * FROM TableName 
WHERE weeknumber IN (SELECT Week_Number FROM SelectedWeek) 

甚至更​​多,你可以運行兩個表的交叉聯接查詢(表中FROM條款用逗號分隔)並避免查找。下面假設SelectedWeek是1列,一列的表,但與WHERE條件,長度處理,你可以明確地在兩個表中的列聲明:

SELECT * 
FROM TableName, SelectedWeek 
WHERE TableName.weeknumber = SelectedWeek.Week_Number 
+0

這做到了。非常感謝你。 我非常精通Excel中的VBA,但我剛剛嘗試學習SQL。你的解釋是非常有幫助和信息量的,我真的很感激它。 –

+0

你可以解釋一些關於將列與查找對齊嗎?我不明白這意味着什麼/表示。 –

+0

太好了,聽到了。請接受答案,如果它解決了您的問題,這也可以解決問題。爲了說明,請看看我在帖子中添加的鏈接,簡要教程「DLookUp()」。基本上,只有當SelectedWeek是查詢中的連接表時,您的較早引用「SelectedWeek!Week_Number」纔會起作用。由於它不是,你必須做一個外部表格查找。 – Parfait