2

我对访问非常陌生(我通常将 MySQLi 与 Navicat 一起使用),我需要将 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
4

3 回答 3

2

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

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

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

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

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

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

于 2012-08-06T14:13:51.100 回答
1

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

我的假设:

  1. 您希望查询对ISBN包含 10 个数字字符的行进行操作。你所有的 10 个字符ISBN值都只包含数字。
  2. ISBN如果行由 10 个数字后跟一个字母组成,则查询还应该对具有 11 个字符值的行进行操作。

如果这些假设是正确的,请尝试使用类似于此(未经测试)版本的 WHERE 子句。

WHERE
    Len(ISBN) = 10
    OR (
           Len(ISBN) = 11
           AND ISBN ALike "%[a-z]"
       )
于 2012-08-06T15:26:23.753 回答
0

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

Function ISBN1013(ISBN as string) as string

你能检查一下这条线是否以'string'结尾而不是别的什么?

于 2012-08-06T15:26:24.893 回答