首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA/ACE OLEDB/SQL运行时错误-2147217913标准表达式中的数据类型不匹配

VBA/ACE OLEDB/SQL运行时错误-2147217913标准表达式中的数据类型不匹配
EN

Stack Overflow用户
提问于 2017-05-31 19:10:53
回答 1查看 1.1K关注 0票数 0

我使用ACE OLEDB从VBA运行SQL查询,而不连接到Access。我这样做是为了能够快速地将一些Excel表粉碎。我不想把这个转变成另一个平台,所以我更愿意解决当前的问题。

VBA代码对许多查询没有问题,但是我遇到了以下查询中提到的错误:

代码语言:javascript
复制
SELECT
    bcr.DialCode,
    bcr.Destination,
    (
        SELECT
            TOP 1 cc.CountryCode
        FROM
            table2 AS cc
        WHERE
            bcr.DialCode LIKE cc.CountryCode+'%'
        ORDER BY LEN(cc.CountryCode) DESC
    ) AS CountryCodes
FROM
    table1 AS bcr

改编自:Server 2000中最长前缀匹配的代码

其目的是通过查找最具包容性的匹配,将拨号电话号码匹配到目的地国家。重复使用所引用的输入和预期结果的文本样本(适应这项工作):

代码语言:javascript
复制
bcr.DialCode = '0841234567'

cc.CountryCode = {'084',
                 '0841',
                 '08412'}

Expected output = {'0841234567','Destination 1','08412'}

从网上搜索看,也许我在查询中使用了一个保留字。但是我已经单独测试了查询的不同部分,没有任何错误。例如:

代码语言:javascript
复制
SELECT
    bcr.DialCode,
    bcr.Destination
FROM
    table1 AS bcr

按预期工作。另外:

代码语言:javascript
复制
SELECT
    TOP 1 cc.CountryCode
FROM
    table2 AS cc
WHERE
    cc.CountryCode LIKE '1'+'%'
ORDER BY LEN(cc.CountryCode) DESC

没有错误并输出预期的结果。

用于将查询传递给ADO连接的变量被模糊为String,但我尝试将其设置为variable而不作任何更改。

通过ACE实现SQL是否存在“最长前缀匹配”查询不起作用的差异?如有任何指导,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-31 19:43:43

首先,请阅读我对这个问题的评论。

第二,请阅读以下文章:

我收到一条关于数据类型不匹配的消息

MS 2003: LIKE条件(使用通配符)

最后,如果您想将一个数据与另一个StartsWith("SomeString")数据进行比较,您可以使用如下所示:

代码语言:javascript
复制
SELECT
    bcr.DialCode,
    bcr.Destination,
    cc.CountryCode
FROM table1 AS bcr 
    INNER JOIN table2 AS cc 
    ON cc.CountryCode = LEFT(bcr.DialCode, LEN(cc.CountryCode))
ORDER BY LEN(cc.CountryCode) DESC;

有关更多详细信息,请参见:MS Access:左函数

注意:不要忘记在查询结束时使用;。MS数据库喜欢;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44292945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档