繁体   English   中英

SQL查询返回查询中的数据类型不匹配 - 为什么?

[英]SQL Query Returns DataType Mismatch in Query - Why?

我在这里有一个非常简单的SQL查询 - 重点是查看发票描述并标记发票(如果它不是有效状态)。 以下是我的代码和功能:

查询:

CurrentDb.Execute "UPDATE Processing " & _
"SET [Invoice Flag] = True " & _
"WHERE isValidState(getState([Inv Description])) = False"

getState从Invoice Description到拆分发票描述字符串

Public Function getState(description As String) As String
    Dim s() As String
    s = Split(description, ".")
    If (UBound(s) > 1) Then
        getState = s(UBound(s) - 1)
    Else
        getState = " "
    End If
End Function

IsValidState如果是否有效,则返回布尔值

Public Function isValidState(st As String) As Boolean
    Dim db As Database
    Dim rs As Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tblStates", dbOpenSnapshot)
    rs.FindFirst ("StateCode = '" & st & "'")
    If rs.NoMatch Then
        isValidState = False
    Else
        isValidState = True
    End If
    rs.Close
End Function

任何线索或帮助表示赞赏。 我发现这个错误在日期发生了很多,但事实并非如此。 数据记录可能有一些空行 - 所以这可能与它有关? 无论哪种方式,我都无法对那些空洞的描述做任何事情 - 我也不知道它应该如何起作用。 由于存在IF / ELSE语句,它应该只返回布尔值并标记发票。

如果[Inv Description]可以为Null则无法将您的函数声明为

Public Function getState(description As String) As String

你需要声明它

Public Function getState(description As Variant) As String

然后用类似的东西处理Null案例

If IsNull(description) Then
    getState = ""  ' or whatever
Else
    ' remaining code as before

通过从SELECT而不是UPDATE语句开始解决SQL错误。 创建一个新查询,切换到SQL视图,并粘贴到此SQL:

SELECT
    *,
    getState(Nz([Inv Description],'')) AS state_code
FROM Processing
WHERE
    isValidState(getState(Nz([Inv Description],''))) = False

Nz()表达式将Null [Inv Description]转换为字符串,这是getState()函数所要求的。 (Null 不是字符串。)

如果它没有错误,请修改UPDATE查询以使用相同的WHERE子句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM