Ms-Access

訪問:變體類型查詢中 VBA 的數字格式

  • January 23, 2018

可以說我有兩個查詢,例如

select iif(condition, col, null) from table

select f(col) from table

其中col是一個雙值列f是一個 VBA- public function(value as double) as variant。稍後,我將相應欄位的格式更改為以某種數字格式顯示,例如百分比。我決定f應該是 a variant,因為它應該在適當的時候返回 Null 。但是,在前一種情況下,我指定的格式受到尊重,但如果我切換到後者,則完全忽略數字格式。為什麼?

答案可以在 Allen Browne 的頁面中找到:

在查詢中,一列只能是一種數據類型。因此,JET 將變體視為文本,因為任何內容(數字、日期、字元……)在文本列中都是有效的。

數字格式選項不會影響從 VBA 變體自動轉換的文本值,即使原始值編碼為數字也是如此。

他推薦的解決方案是做你已經發現的事情:使用 IIF 語句。Jet 引擎使用來自參數的數據類型線索來確定返回列的數據類型。


下面是一些程式碼,將顯示自動選擇的列類型:

Dim rs As Recordset2
Set rs = CurrentDb.OpenRecordset("SELECT f([Col]) FROM table")
Debug.Print "Is text? " & (rs.Fields(0).Type = dbText)
rs.Close

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