[英]Access SQL - Error handling at run-time
我編寫了一個VBA函數,可以動態構建INSERT INTO
查詢。 此查詢基於從另一個表中選擇的公式計算分數
例如,公式"[Cash]/[Sales]"
將產生如下查詢:
INSERT INTO tblKPIScores
SELECT Employee, [Cash]/[Sales] as Score
FROM tblBasedata
為了避免div / 0錯誤,我嘗試編寫另一個函數,該函數能夠計算公式的哪個部分(如果有的話)包含除數,然后單獨在SQL查詢中測試它,例如
INSERT INTO tblKPIScores
SELECT Employee, IIF([Sales] = 0,0,[Cash]/[Sales]) as Score
FROM tblBasedata
然而,有些公式非常復雜,有很多括號,可能包含幾個除數,所以我無法編寫一個可以可靠地返回任何給定公式的除數的UDF。
我現在正在嘗試這樣的事情:
INSERT INTO tblKPIScores
SELECT Employee, IIF(ISERROR(tScore),0,tScore) AS Score
FROM
(SELECT Employee, [Cash]/[Sales] as tScore
FROM tblBasedata)
但不是輸入零,這仍然是#Num! 錯誤,因為我認為它正在評估IIF函數的兩個部分,如果true或false部分評估為錯誤,則返回錯誤。
所以我的問題是,有沒有辦法處理#Num! SQL在運行時出錯還是有更好的方法來解決這個問題?
為什么不定義一個Function來處理除法並在SQL中調用它? 通過使用Variant數據類型,您還可以檢查Null值。 根據需要更改它們。
Public Function SqlCalculation(ByVal value1 As Variant, ByVal value2 As Variant) As Double
If value2 = 0 Then SqlCalculation = 0 Else SqlCalculation = value1 / value2
End Function
要在SQL中調用它:
INSERT INTO tblKPIScores (...)
SELECT Employee, SqlCalculation([Cash],[Sales]) as Score
FROM tblBasedata
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.