2013-01-15 96 views
1

jd都評估相同的功能,但是當我使用If IsNull來捕獲任何空值時,d的值未正確評估。這是什麼造成的?捕獲DSum空結果計算錯誤

Dim d As Integer 
    Dim j As Integer 

    j = DSum("Count", "qry_nihr_unique") 
    If IsNull(d = DSum("Count", "qry_nihr_unique")) Then 
     MsgBox "No records were found for the data criteria you entered" 
     GoTo ESub 
    Else 
     Me.un_p.Value = d 
    End If 

    Debug.Print "j = " & j 
    Debug.Print "d = " & d 


    j = 58 
    d = 0 

更新的代碼回答

Dim d 
    d = DSum("Count", "qry_nihr_unique") 
    If IsNull(d) Then 
     MsgBox "No records were found for the data criteria you entered" 
     GoTo ESub 
    Else 
     Me.un_p.Value = d 
    End If 

HansUp的回答後,經過下面我相信這是寫這個最有效的方式。

回答

1

IsNull()之內,代碼檢查d是否等於DSum()表達式。這是一個平等測試,沒有任何分配給d。所以d的值保持不變---它初始化爲零並保持爲零。

的情況是喜歡這個即時窗口會話:

? DSum("id", "tblFoo") 
134 
d = 0 
? (d = DSum("id", "tblFoo")) 
False 
? d 
0 
? IsNull(d = DSum("id", "tblFoo")) 
False 
? d 
0 

下面的語句將DSum()結果分配給d;不測試兩者是否相等:

d = DSum("id", "tblFoo") 
? d 
134 
+0

所以在我的代碼中,我必須測試'IsNull'然後複製該行以將值賦給d?編輯:我更新了我的代碼以反映這一點,這是最簡潔的方法嗎? –

+1

我最好的猜測是將'd'聲明爲Variant。將'DSum()'結果賦給'd'。然後檢查'IsNull(d)'。 – HansUp