2

Access 2010 データベースで次の式パターンを頻繁に使用します。

IIF(ISNULL(fieldName), Null, myFunction(fieldName))

ここで myFunction は、fieldName の値を別の形式に変換するユーザー定義関数です (存在する場合)。

タイピングを少し減らすために、次の関数を定義しようとしました。

Function IifIsNull(p AS Variant, v AS Variant) AS Variant
    If IsNull(p) Then IifIsNull = p Else IifIsNull = v
End Function

そして、私はそれを次のように使用することになっていました:

IifIsNull(fieldName, myFunction(fieldName))

しかし、うまくいきません。が Null の場合fieldName、 の戻り値は でありIifIsNull#Error呼び出さIifIsNullれていません!

ユーザー定義関数またはシステム関数を使用して、指定されたコード パターンを単純化することはできますか?

アップデート:

がいくつかありmyFunction、それらの関数はすべて厳密に型指定されています。簡単な例を次に示します。

Function RemoveSpace(str AS String) AS String
    For i=1 to Len(str)
        If Mid(str,i,1) <> " " Then RemoveSpace = RemoveSpace + Mid(str,i,1)
    Next
End Function
4

2 に答える 2

3

がnullmyFunction(fieldName)の場合、エラーがスローされると思います。fieldName

を呼び出すIifIsNull(fieldName, myFunction(fieldName))と、最初に評価されるのはmyFunction(fieldName)です。したがって、fieldNamenull の場合、エラーが発生します。

于 2012-07-13T07:42:02.990 に答える
1

MyFunction で fieldname を単純に評価しないのはなぜですか?

空の文字列をフィールド名に追加して、null ではなく常に文字列が渡されるようにします。

=MyFunction(FieldName & "")

Function MyFunction(Fieldname) As Variant
   ''Depending on what your function does, it is may not necessary to check
   If FieldName<>"" Then
       MyFunction = FieldName & " was here"
   End If
End Function
于 2012-07-13T08:17:26.347 に答える