2017-06-21 6 views
1

私は、即時にINSERT INTOクエリを構築するVBA関数を書いています。このクエリは、別のテーブルから選択される式に基づいてスコアを計算SQLにアクセス - 実行時のエラー処理

例えば式"[Cash]/[Sales]"はのようなクエリにつながる:私は別のものを書き込もうとDIV/0エラーを回避するために、

INSERT INTO tblKPIScores 
SELECT Employee, [Cash]/[Sales] as Score 
FROM tblBasedata 

式のどの部分(もしあれば)に除数が含まれているかを調べ、これを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関数の両方の部分を評価していると信じていると真と偽の部分のいずれかがエラーに評価する場合、エラーを返す。

私の質問は#Numを処理する方法があるからです!実行時にSQLのエラーが発生するか、この問題に近づくより良い方法がありますか?

答えて

0

分割を処理して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 
+0

こんにちはコスタス、答えに感謝を。私が持っている問題は、私が質問で与えた例の式は非常に単純ですが、他の数式の多くはもっと複雑であり、複数の除数を含んでいるということです。私はUDFを作成して、与えられた関数の除数を計算しようとしましたが、そうすることはできませんでした。そのため、実行時にエラーをキャッチすることを望んでいたのですが、可能かどうかわかりません。 – Leroy

+1

わかりました。私はorelse divisionがエラーを投げるたびにゼロをチェックする必要があると信じています。 –

関連する問題