访问权-“访问权”;“条件表达式中的数据类型不匹配”;具有VBA功能

访问权-“访问权”;“条件表达式中的数据类型不匹配”;具有VBA功能,vba,ms-access,Vba,Ms Access,运行此查询时,条件表达式中出现错误数据类型不匹配。 看下面我试过的。问题是我如何进一步调查以发现错误 SELECT qCalls.Senso, qCalls.Data, qCalls.Ora, qCalls.NumeroPulito, qCalls.Durata, qContactsOutlookPerCallsUNION.Azienda, IIf(Count([NOME])=1,First([NOME]),"**nomi multipli**") AS Nome2 FROM

运行此查询时,条件表达式中出现错误数据类型不匹配。 看下面我试过的。问题是我如何进一步调查以发现错误

SELECT qCalls.Senso, qCalls.Data, qCalls.Ora, qCalls.NumeroPulito, qCalls.Durata, qContactsOutlookPerCallsUNION.Azienda, IIf(Count([NOME])=1,First([NOME]),"**nomi multipli**") AS Nome2
FROM qCalls INNER JOIN qContactsOutlookPerCallsUNION ON qCalls.NumeroPulito = qContactsOutlookPerCallsUNION.Numero
GROUP BY qCalls.Senso, qCalls.Data, qCalls.Ora, qCalls.NumeroPulito, qCalls.Durata, qContactsOutlookPerCallsUNION.Azienda
ORDER BY qCalls.Data DESC;
单独调用时,
qCalls
qContactsOutlookPerCallsUNION
都能正确运行。 我的SQL中没有条件表达式(=据我所知,WHERE子句)。然后,我认为数据类型问题在于
内部联接
部分,但是:

  • qCalls.numeriopulito
    是一个字符串,来自:
    CStr(替换为numeriopulito([Number],“+39”)
  • qContactsOutlookPerCallsUNION.Numero
    是一个字符串,它来自于:
    IIf(IsNull([Phone]),Null,PulisciTelPerCalls([Phone]),因为Fisso
    其中
    PulisciTelPerCalls()
    是一个返回字符串的VBA函数

如果不太确定,我认为错误是由内联if语句
IIF()
造成的,因为它无论如何都会检查这两个条件,因此可能会向函数发送空值

Public Function PulisciTelPerCalls(ByVal Phone As Variant) As String
    If IsNull(Phone) Then
        PulisciTelPerCalls = vbNullString
        Exit Function
    End If

    'rest of method 
End Function
我认为您应该废弃
IIF
,并在函数中处理空值

Public Function PulisciTelPerCalls(ByVal Phone As Variant) As String
    If IsNull(Phone) Then
        PulisciTelPerCalls = vbNullString
        Exit Function
    End If

    'rest of method 
End Function
然后直接调用该方法:

PulisciTelPerCalls([Phone]) AS Fisso

不必太确定,我相信错误是由内联if语句
IIF()
引起的,因为它无论如何都会检查这两个条件,因此可能会向函数发送空值

Public Function PulisciTelPerCalls(ByVal Phone As Variant) As String
    If IsNull(Phone) Then
        PulisciTelPerCalls = vbNullString
        Exit Function
    End If

    'rest of method 
End Function
我认为您应该废弃
IIF
,并在函数中处理空值

Public Function PulisciTelPerCalls(ByVal Phone As Variant) As String
    If IsNull(Phone) Then
        PulisciTelPerCalls = vbNullString
        Exit Function
    End If

    'rest of method 
End Function
然后直接调用该方法:

PulisciTelPerCalls([Phone]) AS Fisso
字符串上的CStr没有意义。尝试将其删除并使用Nz:

字符串上的CStr没有意义。尝试将其删除并使用Nz: