Access 中的自定义函数返回类型转换错误
Posted
技术标签:
【中文标题】Access 中的自定义函数返回类型转换错误【英文标题】:Custom function in Access is returning type conversion error 【发布时间】:2014-11-18 22:55:58 【问题描述】:我正在 Access 中创建一个自定义函数,它检查 2 个字段以查看其中是否有值并根据哪个字段具有值返回答案。
其中一半有效,但是在尝试使用自定义函数时查询后出现类型转换错误。
可能有 4 个结果,所有结果都返回不同的答案。
1) 字段 1 为空,字段 2 为空 = 函数不返回任何内容。
2) 字段 1 为空且字段 2 有值 = 函数返回文本字符串“删除”
3) 字段 1 有一个值,而字段 2 为空 = 函数返回文本字符串“New”
4) 字段 1 有值 & 字段 2 有值 = 检查值是否相同
4a) 如果值相同 = 函数返回文本字符串“匹配”
4b) 如果值不同 = 函数返回文本字符串“更新”
我尝试使用案例选择来确定哪个字段为空,哪个字段不是, 但是我求助于使用 If 语句,因为我没有得到我想要的结果。
目前起作用的一半是比较两个值并返回“匹配”和“更新”。 一半不起作用的是它需要返回“删除”或“新建”。好像无法判断字段是否为空。
我尝试使用 IsEmpty、IsNull 和 Field = ""
这是我的代码:
Public Function BarcodeCheck(DBTPART As String, SUPPBC As String)
If IsEmpty(DBTPART) And IsEmpty(SUPPBC) Then
BarcodeCheck = ""
End If
If IsEmpty(DBTPART) And Not IsEmpty(SUPPBC) Then
BarcodeCheck = "NEW BC"
End If
If Not IsEmpty(DBTPART) And IsEmpty(SUPPBC) Then
BarcodeCheck = "DELETE BC"
End If
If Not IsEmpty(DBTPART) And Not IsEmpty(SUPPBC) Then
If DBTPART = SUPPBC Then
BarcodeCheck = "MATCH"
Else
BarcodeCheck = "UPDATE BC"
End If
End If
End Function
【问题讨论】:
【参考方案1】:问题在于函数的参数,它们被声明为String
Public Function BarcodeCheck(DBTPART As String, SUPPBC As String)
如果字段DBTPART
和SUPPBC
可以包含Null
,那么您必须在UDF 中将参数声明为Variant
。在 Visual Basic 中,唯一可以包含Null
的数据类型是Variant
。然后在您的 UDF 中使用IsNull()
函数将字段值与Null
进行比较。
所以当参数是Variant
类型时,函数应该可以工作。 (也许你可以使用If-Then-ElseIf
?)
Public Function BarcodeCheck(DBTPART As Variant, SUPPBC As Variant)
If IsNull(DBTPART) And IsNull(SUPPBC) Then
BarcodeCheck = "EMPTY123"
ElseIf IsNull(DBTPART) And Not IsNull(SUPPBC) Then
BarcodeCheck = "NEW BC"
ElseIf Not IsNull(DBTPART) And IsNull(SUPPBC) Then
BarcodeCheck = "DELETE BC"
ElseIf Not IsNull(DBTPART) And Not IsNull(SUPPBC) Then
If DBTPART = SUPPBC Then
BarcodeCheck = "MATCH"
Else
BarcodeCheck = "UPDATE BC"
End If
End If
End Function
【讨论】:
以上是关于Access 中的自定义函数返回类型转换错误的主要内容,如果未能解决你的问题,请参考以下文章