2013-11-15 105 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