为什么我会在“条件表达式中遇到数据类型不匹配?”

时间:2012-08-06 13:46:01

标签: ms-access

我是非常新的访问(我通常使用带有Navicat的MySQLi),我需要将10位数的isbn数字转换为13位数。我有以下查询调用一个函数来做这个(我没有创建函数,但它工作,我在执行其他查询时使用它):

    SELECT ISBN1013([ISBN]) AS ISBN13, LastSoldDate AS LastSold, Id AS Sku, OnHand AS Quantity, Store 
FROM [Store Inventory]
WHERE (((ISBN1013([ISBN])) Like "##########?"));

当我尝试运行它时,一切看起来都很好,然后我收到一条错误消息,指出:标准表达式中的数据类型不匹配。我试图在谷歌和这里查看这个,但我找不到任何解释这个错误的东西。 任何人都可以帮助我吗?

编辑:这里有一些信息如何开始以及它应该如何结束的样本。

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

3 个答案:

答案 0 :(得分:2)

尝试在ISBN字段周围添加NZ函数:

SELECT NZ(ISBN1013([ISBN]),"") AS ISBN13

这会将任何空值转换为空字符串。

如果不起作用,请尝试CStr

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

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

答案 1 :(得分:1)

我仍然不确定我对这个问题的理解程度如何,但是因为你说没有WHERE条款就会失误,让我们尝试不同的WHERE

我的假设:

  1. 您希望查询对ISBN由10个数字字符组成的行进行操作。并且您的所有10个字符ISBN值都只包含数字。
  2. 查询还应对具有11个字符ISBN值的行进行操作,如果它们由10个数字后跟一个字母组成。
  3. 如果这些假设是正确的,请尝试类似于此(未经测试)版本的WHERE子句。

    WHERE
        Len(ISBN) = 10
        OR (
               Len(ISBN) = 11
               AND ISBN ALike "%[a-z]"
           )
    

答案 2 :(得分:0)

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

Function ISBN1013(ISBN as string) as string

你能检查一下这行是以'string'结尾而不是别的吗?