簡體   English   中英

Access SQL - 運行時的錯誤處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM