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#ErrorIifIsNull

是否可以使用用户定义的函数或系统函数来简化给定的代码模式?

更新:

有几个myFunctions,所有这些函数目前都是强类型的,一个简单的例子如下:

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

我假设当为空时会myFunction(fieldName)引发错误。fieldName

当您打电话IifIsNull(fieldName, myFunction(fieldName))时,首先要评估的是myFunction(fieldName). 所以如果fieldName为空,你会得到一个错误。

于 2012-07-13T07:42:02.990 回答
1

为什么不简单地评估 MyFunction 中的字段名?

将一个空字符串附加到字段名称以确保它始终传递一个字符串,而不是空值。

=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 回答