MS Access VBA SQL查询调试选择案例

Posted

技术标签:

【中文标题】MS Access VBA SQL查询调试选择案例【英文标题】:MS Access VBA SQL query debugging select case 【发布时间】:2013-11-15 10:06:51 【问题描述】:

在 MS Access 2013 VBA 中,我在此 SQL 字符串中遇到语法错误:

strSQL = "INSERT INTO [man_year] ( man_year_val, year_int, main_research_area, organisation, man_year_source ) SELECT KU.[2007], '2007' AS Expr1, " _
& "select case right(left(KU.man_year_source;6);2) like 'Hu' 3 case right(left(KU.man_year_source;6);2) like 'Sa' 1 case right(left(KU.man_year_source;6);2) like 'Te' 2 case right(left(KU.man_year_source;6);2) like 'Su' 4 case right(left(KU.man_year_source;6);2) like 'Ud' 5 AS Expr2, " _
& "4 AS Expr3, " _
& "select switch" _
& "(left(KU.man_year_source;3) like '1. '; 1;" _
& "left(KU.man_year_source;3) like '1.1'; 4;" _
& "left(KU.man_year_source;3) like '1.2'; 5;" _
& "left(KU.man_year_source;3) like '1.3'; 6;" _
& "left(KU.man_year_source;3) like '1.4'; 7;" _
& "left(KU.man_year_source;3) like '1.5'; 8;" _
& "left(KU.man_year_source;3) like '1.6'; 9;" _
& "left(KU.man_year_source;3) like '2. '; 2;" _
& "left(KU.man_year_source;3) like '2.1'; 47;" _
& "left(KU.man_year_source;3) like '2.2'; 48;" _
& "left(KU.man_year_source;3) like '2.3'; 49;" _
& "left(KU.man_year_source;3) like '2.4'; 50;" _
& "left(KU.man_year_source;3) like '2.5'; 51;" _
& "left(KU.man_year_source;3) like '2.6'; 52;" _
& "left(KU.man_year_source;3) like '3. '; 3;" _
& "left(KU.man_year_source;3) like '3.1'; 53;" _
& "left(KU.man_year_source;3) like '3.2'; 54;" _
& "left(KU.man_year_source;3) like '3.3'; 55;" _
& "left(KU.man_year_source;3) like '3.4'; 56;" _
& "left(KU.man_year_source;3) like '3.5'; 57;" _
& "left(KU.man_year_source;3) like '3.6'; 58) from KU;"

我在 CASE 部分收到错误,但这可能是因为它尚未到达 SWITCH 部分。 :-) 谁能帮忙,我找不到错误。

最好的pmelch

【问题讨论】:

据我所知(请格式化你的帖子)你有几个SELECT 子句一个接一个。那是行不通的。每个CASE之前不需要SELECT 访问没有caseAFAIK 即使它会做或会做,我从来不知道这样的案例...... 现在真的是第一个停靠港吗?人们在来这里之前甚至不会尝试搜索自己的文档或示例吗? @Ben - 你对我搜索的内容了解多少? 【参考方案1】:

我发现您的 SQL 语句至少有两个问题:

首先,Access SQL 不支持CASE 关键字。如果您正在考虑 T-SQL(Microsoft SQL Server)中的 CASE ... WHEN 构造,那么 Access SQL 中的等价物是 Switch() 函数(参考:here)。您可以将Switch() 函数视为在做

Switch(when1, then1, when2, then2, ...)

其次,据我所知,Access SQL 仅支持句点 (.) 作为十进制符号和逗号 (,) 作为列表分隔符,即使您计算机上的区域设置指定了其他值(例如,逗号 (,) 作为十进制符号,分号 (;) 作为列表分隔符)。换句话说,我相当确定

left(KU.man_year_source;3)

永远不会工作;你需要使用

left(KU.man_year_source,3)

改为。

【讨论】:

感谢戈德的回答!它现在对我有用。当涉及许多不同的错误时,可能很难进行调试。我发现网站说 CASE 可以在 Access SQL 中工作,而其他网站说 CASE 不能工作,所以对我来说这是反复试验。 然后我发现我在 switch 语句中的长长的 when/then 列表不起作用。最好有一个具有这些条件的表并参考该表。无论如何-谢谢戈德的非傲慢回答。

以上是关于MS Access VBA SQL查询调试选择案例的主要内容,如果未能解决你的问题,请参考以下文章

如何使用查询或 VBA 和 SQL 更新 MS ACCESS 中的表

如何使用sql语句和vba将数据从MS-Access导入excel power查询?

使用 Excel VBA 查询 MS Access,SQL BETWEEN 日期查询

编辑器中的 ms-access VBA 长 sql 查询字符串行拆分(内联双引号)

使用 VBA 或 PowerShell 将所有 MS Access SQL 查询导出到文本文件

带有子查询的 SQL 查询上的 MS Access VBA 运行时错误 3075