Ms access 为什么我会得到;条件表达式中的数据类型不匹配?“;

Ms access 为什么我会得到;条件表达式中的数据类型不匹配?“;,ms-access,Ms Access,我对访问非常陌生(我通常将MySQLi与Navicat一起使用),我需要将10位数的isbn数字转换为13位数。我有一个调用函数的查询来完成这项工作(我没有创建函数,但它可以工作,并且在执行其他查询时使用它): 当我尝试运行它时,首先一切看起来都很好,然后我得到一条错误消息,该消息指出:条件表达式中的数据类型不匹配。我试着在谷歌和这里查找,但我没有找到任何解释这个错误的东西。 有人能帮我吗 编辑:这里有一个信息如何开始和如何结束的示例 0448431351 -> should end u

我对访问非常陌生(我通常将MySQLi与Navicat一起使用),我需要将10位数的isbn数字转换为13位数。我有一个调用函数的查询来完成这项工作(我没有创建函数,但它可以工作,并且在执行其他查询时使用它):

当我尝试运行它时,首先一切看起来都很好,然后我得到一条错误消息,该消息指出:条件表达式中的数据类型不匹配。我试着在谷歌和这里查找,但我没有找到任何解释这个错误的东西。 有人能帮我吗

编辑:这里有一个信息如何开始和如何结束的示例

 0448431351 -> should end up as 9780448431352
 0736425543 -> should be 9780736425544

尝试在ISBN字段周围放置
NZ
函数:

SELECT NZ(ISBN1013([ISBN]),"") AS ISBN13
这会将任何空值转换为空字符串

如果不起作用,请尝试CStr:

SELECT CStr(ISBN1013([ISBN])) AS ISBN13

这会将任何非字符串值转换为字符串。我知道你说过你没有任何空值,但根据我的经验,即使你认为所有数据都符合预期格式,这也是有效的方法之一。

我仍然不确定我对这个问题的理解程度,但既然你说没有
WHERE
子句,错误就会消失,让我们在中尝试不同的

我的假设:

  • 您希望查询对
    ISBN
    包含10个数字字符的行进行操作。所有10个字符的ISBN值都只包含数字
  • 如果ISBN值由10位数字和一个字母组成,则查询还应该对具有11个字符
    ISBN
    值的行进行操作
  • 如果这些假设是正确的,请尝试类似于此(未测试)版本的WHERE子句


    你说你是新来的,所以我想我应该澄清一下HansUps的评论。您能看看VBA模块中的ISBN1013()函数吗?第一行应该是这样的:

    Function ISBN1013(ISBN as string) as string
    

    你能检查这一行是否以“string”结尾,而不是其他内容吗?

    ISBN列中是否有空值?不,我没有,只有10位的ISBN需要转换为13位的ISBN。如果你删除WHERE子句,你仍然会收到错误消息吗?不,我没有。我想我需要它来整理所有不超过10个字符的信息。是的,你可能需要一个WHERE子句,但不是一个抛出错误的子句。您的
    ISBN
    字段的数据类型是什么,以及
    ISBN1013()
    返回的值的数据类型是什么?如果您向我们展示示例
    ISBN
    值、这些值中的每一个发生了什么以及应该发生什么,这可能会更清楚。仍然会收到错误消息。这可能是由isbn字段中的soem值以字母而不是数字结尾造成的,比如123456789x吗?不应该是这样,因为
    like
    部分需要一个字符串,而字符串就是您给它的。对不起,我被难住了。这是第一行:函数ISBN1013(ByVal ISBN作为String)作为String,ISBN应该只有10位数字,或者9位,末尾有一个字母。我调整了新的WHERE子句,使其能够完美地工作!谢谢你的帮助,很好。看起来这会帮助我更多地了解ISBN值。同时,我很高兴我的回答为你指出了一些有用的东西,尽管我的假设是错误的。:-)我相信更多的是因为我的解释含糊不清,而不是因为你的假设是错误的。
    WHERE
        Len(ISBN) = 10
        OR (
               Len(ISBN) = 11
               AND ISBN ALike "%[a-z]"
           )
    
    Function ISBN1013(ISBN as string) as string