我经常在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))
但它不起作用。当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
答案 0 :(得分:3)
我认为当myFunction(fieldName)
为空时fieldName
会抛出错误。
当您致电IifIsNull(fieldName, myFunction(fieldName))
时,首先评估的是myFunction(fieldName)
。因此,如果fieldName
为空,则会出错。
答案 1 :(得分:1)
为什么不简单地评估MyFunction中的fieldname?
将空字符串附加到字段名称以确保它始终传递字符串,而不是空字符。
=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