2012-04-16 77 views
0

我在其中一個窗體上有一個組合框,它返回一個數字,我將這個數字用作查詢中某個字段的條件,但是如果沒有選項在組合框中已被選中我想使用的標準默認設置,但訪問總是告訴我,我有無效的語法。有人能告訴我我該如何做到這一點?如何在訪問查詢中使用「iif」中的不等式

IIf(IsNull([Forms]![frm_a]![cmbo_b]),<2 or >3,[Forms]![frm_a]![cmbo_b])

的問題,當我在if語句中使用<2 or >3發生。

+0

你引用的默認標準是什麼? – 2012-04-16 09:15:13

回答

1

您的問題是兩個部分。首先,這裏是一個僞IIF語句來幫助你瞭解他們的工作:

IIF(IsNull(SomeFieldOrControl),ConditionIsTrueSoDoThis,ConditionIsFalseSoDoThis) 

另一種方式來解釋,這是與這個例子中,我們將展示一個零長度字符串,如果cmbo_b爲null:

這將顯示一個零長度字符串,如果cbmo_b爲null:

IIF(IsNull([Forms]![frm_a]![cmbo_b]),"",[Forms]![frm_a]![cmbo_b]) 

我想你需要你的IsNull函數切換到NZ(零到零)功能。

對於第二部分,當涉及到評估你通常需要用括號,這樣的事情圍繞着它由兩個部分組成的條件。我真的不認爲這會工作,但它是我能想到的,如果你堅持嘗試一次評估兩種不同的可能性嘗試的唯一的事情。如果條件評估爲真,我已經設置爲0。我真的不知道要顯示該語句,因爲你沒有使用IIF函數正確地開始是真實的。

IIF(Nz([Forms]![frm_a]![cmbo_b],0)(<2 or >3),0,[Forms]![frm_a]![cmbo_b]) 

我在想爲什麼你不只是檢查是否自認爲條件= 3是要在周圍的方式評估顯然是什麼。只是爲了展示一下,如果條件被發現是真的,我真不知道,因爲你的代碼不給任何線索:

IIF(Nz([Forms]![frm_a]![cmbo_b],0)=3,0,[Forms]![frm_a]![cmbo_b]) 

對於最後一句話,這可能是個人喜好的問題,但我儘量遠離其他形式引用控件消失,除非它周圍有隻是沒有辦法。像這樣的代碼往往是非常脆弱的,因爲重命名窗體或控件,或者只是將窗體變成子窗體都會導致代碼失敗和/或錯誤。這並不是說它完全不正確,只是我試圖堅持易於閱讀和儘可能維護的代碼。

我要做的往往做的是形式或子窗體創建公共職能,然後使用下面的語句調用它們:

Call Forms("frm_a").MyPublicFunctionName() 

Call Me.Parent.MyPublicFunctionName() 'Call function on main form from subform 

Call Me.subform1.Form.MyPublicFunctionName() 'Call function on subform 

一旦再次,我認爲這可能只是個人喜好的問題。像這樣的公共函數很難調試,因爲如果在MyPublicFunctionName內發生任何錯誤,您的代碼將停止在上面的行,並且您將不知道哪一行實際上導致了問題。