2016-07-12 84 views
0

我有一個MS-查詢,導致在運行時錯誤#問題3071 的消息很長,這裏是開始時:MS-Access 2007中查詢運行時錯誤

的表達式類型不正確或太複雜而無法評估。

查詢有許多欄目和功能,並與一些試驗和錯誤我已經分離查詢的問題的部分是:

... 
And 
[Component.Serial])>=Val(([Forms]![frm_RptFilter_Components].[fldAutoSeq])) 
And 
([Component.Serial])<=Val(([Forms]![frm_RptFilter_Components].[fldAutoSeq2]))) 

名稱:frm_RptFilter_Components是形式的正確名稱其中輸入來自名稱:fldAutoSeq,fldAutoSeq2是該窗體上的字段的名稱。

表達式...正確,並在查詢的其他部分使用。所以拼寫不是問題。

數據庫中的列是「Serial」,它是一個整數。它正在與一個表單域(文本域)進行比較。

我可以通過自己作爲執行問題的一部分:

SELECT * FROM Component 
WHERE ((
    [Component.Serial])>=Val(([Forms]![frm_RptFilter_Components].[fldAutoSeq])) 
    And 
    ([Component.Serial])<=Val(([Forms]![frm_RptFilter_Components].[fldAutoSeq2]))) 

所以,我很困惑。如果有問題的部分包含語法錯誤,則上面的SELECT應該不起作用。但是,刪除該部分時,原來的大查詢會出錯。

我的猜測是,當從子窗體運行查詢時,這些字段沒有正確傳遞給查詢並且是數字字段,這會導致問題。

你看到我收到消息的原因嗎?

回答

1

試試這個:

And 
[Component.Serial]>=[Forms]![frm_RptFilter_Components].[fldAutoSeq] 
And 
[Component.Serial]<=[Forms]![frm_RptFilter_Components].[fldAutoSeq2] 

指定這兩個參數爲長:

[Forms]![frm_RptFilter_Components].[fldAutoSeq] 
[Forms]![frm_RptFilter_Components].[fldAutoSeq2] 
+0

很聰明。有效!我對MS-Access沒有深入的瞭解,但對我來說並不明顯! – NoChance

+0

這是一個古老的把戲。它的工作原理是縮小表單字段輸入的可能選項。 – Gustav