2013-10-24 21 views
0

這是針對Access 2007中開發的預算應用程序,目前運行於2010年。應用程序工作正常。我在查詢中發現了一個邏輯錯誤。雖然固定它,我意識到,我可以將參數從改變:DateSerial用作引起奇怪行爲的查詢參數

Month(budget.capture_date) = [forms]![f_budget]![tglMonth] 
AND 
Year(budget.capture_date) = Year([forms]![f_budget]![capture_date]) 

簡單:

budget.capture_date = DateSerial(Year([forms]![f_budget]![capture_date]),[forms]![f_budget]![tglMonth],1) 

應該沒事吧?我的想法可能是由於較少的函數調用而稍快。

在打開查詢時手動測試和鍵入參數時,查詢正常工作。

使用條件通過DoCmd.OpenForm打開預算表單時,所有具有DateSerial參數的子表單顯示爲空白。參數中使用的字段f_budget!capture_date確實包含一個值。

當打開形式手動每子窗體給出下列錯誤(沒有錯誤碼):

該表達式的輸入不正確或者是太複雜,無法評價。例如,數字表達式可能包含太多複雜的元素。嘗試通過將部分表達式分配給變量來簡化表達式。

因此,經過調查後,如果您使用DateSerial打開參數查詢並跳過參數,您將收到上述錯誤。如果您手動輸入日期,它將正常工作。如果我使用條件通過OpenForm打開表單,但沒有錯誤,但所有子表單都是空白的。從那裏,如果我改變設計視圖,然後返回窗體視圖而不關閉窗體,表單將完美工作。如果我關閉表單並手動打開它,我將使用DateSerial條件爲每個子表單收到上述錯誤。

請注意,使用Year()或Month()並跳過查詢的參數將只返回沒有結果,它不會導致上述錯誤。

這一個讓我難住。我創建了一個新的數據庫並導入了所有數據,反編譯,修復,將DateSerial添加到查詢的參數列表中。沒關係,行爲是一致的。任何人有任何見解?

回答

1

Year()和Month()函數允許傳遞NULL,而DateSerail需要有效的整數。

因此,查詢無法運行空的參數。

+0

我明白,我的意思是參數不是空的,子表單失敗了。 – dblE

+0

如何以及當field [forms]![f_budget]![capture_date]充滿了價值? – 4dmonster

+0

Field budget.capture_date是按鈕單擊後面的DoCmd.OpenForm ...條件值打開表單。 DoCmd.OpenForm「f_budget」,,「wbsid ='」&Me!wbsid&「'AND capture_date =#」&dateString&「#AND budget_date =#」&dateString&「#」 – dblE