2013-11-15 107 views
-1

在MS Access 2013 VBA我得到一个语法错误在此SQL字符串:的MS Access 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

+1

从我能弄出来(请格式化你的帖子)yo有几个'SELECT'子句跟在一起。这是行不通的。你不会每次'CASE'之前需要'SELECT' – oerkelens

+1

Access没有一个'case' AFAIK –

+0

即使它还是会的,我从来不知道这是这样的一个情况下... – oerkelens

回答

1

我看到至少有两个问题与你的SQL语句:

首先,访问SQL不支持CASE关键字。如果您考虑T-SQL(Microsoft SQL Server)中的CASE ... WHEN构造,则Access SQL中的等效项为Switch()函数(ref:here)。你可以把Switch()功能如做

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

其次,据我所知访问SQL只支持期(.)作为作为列表分隔小数点符号和逗号(,),即使区域设置在您的机器上指定其他值(例如逗号(,)作为小数点符号和分号(;)作为列表分隔符)。换句话说,我很确定

left(KU.man_year_source;3) 

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

left(KU.man_year_source,3) 

改为。

+0

感谢Gord的回答!现在它适用于我。当涉及许多不同的错误时,可能难以进行调试。我发现网站说CASE将在Access SQL中工作,而其他人说CASE将无法工作,所以对我来说这是试错。 – pmelch

+0

然后我发现我在switch语句中when/then的长列表不起作用。最好是有一张具有这些条件的表格并参考该表格。无论如何 - thnx非傲慢的答案戈登。 – pmelch