SyntaxHighlighter

2013-05-28

Access中自動處理NULL變數

null一直都是個令人喜愛又討厭的小東西
物件導向中他可以代表一個物件並沒有被實體化或是變數名沒有指定給某個實體物件
但是用在變數上...尤其是在SQL中,他還真是個惱人的小東西

我遇到的問題,是使用SQL的SUM()來取用一群資料中的合計數
像是下面的SQL命令,取用表Table1裡的個別Total合成為新的TotalSum

SELECT SUM(Total) AS TotalSum FROM Table1


但是如果上面的命令句在加上WHERE限定的狀態下,取不到任何紀錄的情形中
TotalSum的值不會是想定的0,而是NULL!!
但我又不想特地做個IF或是IIF來處理這個NULL,怎麼辦呢?

這時候,Access裡有個內建的小函數Nz()。他可以檢測第一個引數是否為NULL值,如果為NULL的話回傳第二個引數值

例如上面的TotalSum,如果用DAO.Recordset調用,回傳值是NULL的狀態下,我想把他放給另一個參數,可以寫作下面的樣子

Dim myRS AS DAO.Recordset
Set myRS = CurrentDb.OpenRecordset("","SELECT SUM(Total) AS TotalSum FROM Table1 WHERE ID > 100")
Dim TotalSum AS Long
TotalSum = Nz(myRS!TotalSum,0)

這樣,myRS!TotalSum是Null的時候,TotalSum也會被自動填入0而不是Null,方便我們接下來若是要把他拿來INSERT到另一個變數裡的時候好處理

ps.Nz()只適用於Access 2007以後的產品,若是之前的產品...可能你還是得用IIF來達成你的願望囉...

ps2. 官方說明:Nz 函數

0 件のコメント:

人気の投稿