Ms-Access

為什麼它特別是立即如果(IIF)?

  • December 5, 2017

我對 MS Access(以及一般的數據庫)很陌生,但我注意到 IF() 語句實際上是使用 IIF() 函式編寫的。

線上快速搜尋告訴我,它代表 Immediate If,我假設是因為它是立即評估的。

Support.Office.com 告訴我 IIF() 具有與其他程序和語言中的 IF() 相同的功能,所以我的問題是為什麼它是 IIF() 而不是 IF()?

我無法在任何地方找到這個答案。

是否有“延遲”IF(或任何其他類型的 IF)證明需要立即 IF 是合理的?如果是這樣,另一個 if 的可能案例是什麼?

如果沒有不同的 IF,為什麼 IIF() 函式不只是稱為 IF()?

在 Access 中,IIf ( expr , truepart , falsepart )是一個具有三個參數的函式。

Access 中還提供 VBA(Visual Basic for Applications),它具有通常的If ... Then ... ElseIf ... End If條件執行塊,但在這種情況下If,其他術語都是Basic 語言的關鍵字

函式形式IIF()可以在 SQL 語句中使用,也可以作為某些對象屬性中單個可執行語句的一部分,例如Control Source表單控制項的屬性。在這兩種情況下,都不允許使用完整的多行If結構(即完整的 VBA 程式碼塊)。如果沒有函式形式,就無法在這種情況下執行條件表達式。

名稱不同的一個原因是為了避免函式與關鍵字同名的衝突。有趣的是,Excel 也支持 VBA,但它仍然有一個名為 IF() 的電子表格函式。儘管其中一些原因可能只是原始應用程序設計者決定的慣例(風格),但可能還有其他更微妙的原因。例如,Access 更有可能在不同的上下文中出現混合表達式(如前所述),因此避免與 VBA 關鍵字發生衝突很重要。相反,不可能在電子表格單元格之外的任何其他上下文中執行 Excel“電子表格命令”。儘管可以從 Excel 單元格執行正確定義的 VBA 函式,但不能直接從電子表格命令中執行 VBA 程式碼。換句話說,

在 Access 的情況下,“立即”或“延遲”版本的概念If是不相關的。某些語言(Java、C++、C# 等)支持短路邏輯運算符(如 && – 邏輯與),它們僅在邏輯必要時執行第二條語句。但是IIF()函式和 VBAIf語句都不支持這種行為。“傳遞”到任一表單的所有表達式和/或函式呼叫都將被完全評估/執行。在某些情況下,例如在 SQL 語句中,此類表達式的計算結果可能為 NULL,因此整個表達式也可能為 NULL 並被有效忽略,但忽略表達式的結果與跳過單個語句的執行不同。

引用自:https://dba.stackexchange.com/questions/192320