VBA/ACE OLEDB/SQL 运行-时间错误-2147217913 标准表达式中的数据类型不匹配
VBA/ACE OLEDB/SQL Run-Time error -2147217913 Data type mismatch in criteria expression
我是 运行 来自 VBA 的 SQL 查询,使用 ACE OLEDB,但未连接到 Access。我这样做是为了快速拼凑一些 Excel 表格。我不打算将其转换到另一个平台,因此更愿意解决当前问题。
VBA 代码可以毫无问题地处理大量查询,但我 运行 遇到了以下查询提到的错误:
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
代码改编自:Longest prefix match in SQL Server 2000
目的是通过找到最具包容性的匹配项来将拨打的电话号码与目的地国家/地区相匹配。重复使用输入和预期结果的引用文本样本(根据本练习改编):
bcr.DialCode = '0841234567'
cc.CountryCode = {'084',
'0841',
'08412'}
Expected output = {'0841234567','Destination 1','08412'}
从网上搜索看来,我可能在查询中使用了保留字。但是我已经分别测试了查询的不同部分并且没有得到任何错误。例如:
SELECT
bcr.DialCode,
bcr.Destination
FROM
table1 AS bcr
按预期工作。另外:
SELECT
TOP 1 cc.CountryCode
FROM
table2 AS cc
WHERE
cc.CountryCode LIKE '1'+'%'
ORDER BY LEN(cc.CountryCode) DESC
没有错误并输出了预期的结果。
用于将查询传递给 ADO 连接的变量变暗为字符串,但我已尝试设置为 Variant,没有任何变化。
在通过 ACE 执行 SQL 时,"Longest prefix match" 查询是否不起作用?任何指导将不胜感激。
首先,请阅读我对问题的评论。
其次,请阅读这些文章:
I get a message about data type mismatch
MS Access 2003: LIKE condition (using wildcards)
最后,如果您想将一个数据与另一个 StartsWith("SomeString")
进行比较,您可以使用类似这样的方法:
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 数据库喜欢它 ;)
我是 运行 来自 VBA 的 SQL 查询,使用 ACE OLEDB,但未连接到 Access。我这样做是为了快速拼凑一些 Excel 表格。我不打算将其转换到另一个平台,因此更愿意解决当前问题。
VBA 代码可以毫无问题地处理大量查询,但我 运行 遇到了以下查询提到的错误:
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
代码改编自:Longest prefix match in SQL Server 2000
目的是通过找到最具包容性的匹配项来将拨打的电话号码与目的地国家/地区相匹配。重复使用输入和预期结果的引用文本样本(根据本练习改编):
bcr.DialCode = '0841234567'
cc.CountryCode = {'084',
'0841',
'08412'}
Expected output = {'0841234567','Destination 1','08412'}
从网上搜索看来,我可能在查询中使用了保留字。但是我已经分别测试了查询的不同部分并且没有得到任何错误。例如:
SELECT
bcr.DialCode,
bcr.Destination
FROM
table1 AS bcr
按预期工作。另外:
SELECT
TOP 1 cc.CountryCode
FROM
table2 AS cc
WHERE
cc.CountryCode LIKE '1'+'%'
ORDER BY LEN(cc.CountryCode) DESC
没有错误并输出了预期的结果。
用于将查询传递给 ADO 连接的变量变暗为字符串,但我已尝试设置为 Variant,没有任何变化。
在通过 ACE 执行 SQL 时,"Longest prefix match" 查询是否不起作用?任何指导将不胜感激。
首先,请阅读我对问题的评论。
其次,请阅读这些文章:
I get a message about data type mismatch
MS Access 2003: LIKE condition (using wildcards)
最后,如果您想将一个数据与另一个 StartsWith("SomeString")
进行比较,您可以使用类似这样的方法:
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 数据库喜欢它 ;)