2010-12-19 117 views
0

這不會產生語法錯誤,但它給出錯誤的參數錯誤:語法錯誤(缺少操作員)在查詢表達式 - MS-訪問

SELECT left(
    [aname], 
IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0, 
    Len(FinalForgotten.aname), 
    IIF(instr([aname], ",") = 0, 
    InStr(1,[aname]," ")-1, 
    InStr(1,[aname],",")-1))) 
& "," & 

right(
    [aname], 
IIF(instr([aname], " " = 0 AND instr([aname], ",") = 0, 
    Len(FinalForgotten.aname), 
    IIF(instr([aname], ",") = 0, 
     Len(aname)-InStr(1,[aname]," "), 
     Len(aname)-InStr(1,[aname],","))))) 
& " " & 

defense_final.middle_initial AS fullname INTO FinalForgottenWithMiddle 
FROM FinalForgotten INNER JOIN defense_final ON (right(FinalForgotten.aname, 
IIF(instr([aname], ",") = 0, 
Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname]," "), 
Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],",") 
) 
)=defense_final.first_name) AND (left(FinalForgotten.aname, 
IIF(instr([aname], ",") = 0, 
    InStr(1,FinalForgotten.[aname]," ")-1, 
    InStr(1,FinalForgotten.[aname],",")-1 
    ) 
)=defense_final.last_name); 

因此增加額外的參數我現在得到語法錯誤「失蹤) ,]或查詢表達式中的項目「:

SELECT left(
    [aname], 
IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0, 
    Len(FinalForgotten.aname), 
    IIF(instr([aname], ",") = 0, 
    InStr(1,[aname]," ")-1, 
    InStr(1,[aname],",")-1))) 
& "," & 

right(
    [aname], 
IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0, 
    Len(FinalForgotten.aname), 
    IIF(instr([aname], ",") = 0, 
     Len(aname)-InStr(1,[aname]," "), 
     Len(aname)-InStr(1,[aname],",")))) 
& " " & 

defense_final.middle_initial AS fullname INTO FinalForgottenWithMiddle 
FROM FinalForgotten INNER JOIN defense_final ON 

left(FinalForgotten.aname, 
    IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0, 
     Len(FinalForgotten.aname), 
     IIF(instr([aname], ",") = 0, 
     InStr(1,FinalForgotten.[aname]," ")-1, 
     InStr(1,FinalForgotten.[aname],",")-1))) 

=defense_final.last_name AND 

right(FinalForgotten.aname, 
     IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0, 
     Len(FinalForgotten.aname), 
     IIF(instr([aname], ",") = 0, 
     Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname]," "), 
     Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],",")))) 

=defense_final.first_name; 

任何解決方法?

感謝您的回覆。

+0

may I s你最好給你的表一個簡短的(1個字母)別名,並更新你的問題?這會讓我覺得它更具可讀性。 – 2010-12-20 14:41:55

+0

你提到「錯誤的參數錯誤」。你能指定錯誤嗎?通常情況下,當字段拼寫錯誤時。 – 2010-12-20 14:47:20

+0

@iDevlop它說:「在查詢表達式中使用的函數參數的錯誤數量」左(...「 – JohnMerlino 2010-12-20 15:08:30

回答

0

它會更容易把這種邏輯到VBA功能,使您的查詢看起來像這樣

SELECT GetFullNameWithMiddle([aname]) AS fullname 
INTO FinalForgottenWithMiddle 
FROM FinalForgotten INNER JOIN defense_final 
    ON GetLastName([aname])=defense_final.last_name 
    AND GetFirstName([aname])=defense_final.first_name 

由於你說你不想使用VBA,試試這個。我封閉每

InStr(x, y) = 0 
括號

,所以

IIf(InStr(x, y) = 0 AND InStr(p, q) = 0, g, h) 

成爲

IIf((InStr(x, y) = 0) AND (InStr(p, q) = 0), g, h) 

做出這樣的轉變讓我切換到查詢設計網格,這意味着SQL解析器喜歡它:

SELECT left(
    [aname], 
    IIF((instr([aname], " ") = 0) AND (instr([aname], ",") = 0), 
    Len(FinalForgotten.aname), 
    IIF((instr([aname], ",") = 0), 
    InStr(1,[aname]," ")-1, 
    InStr(1,[aname],",")-1))) 

    & "," & 

right(
    [aname], 
    IIF((instr([aname], " ") = 0) AND (instr([aname], ",") = 0), 
    Len(FinalForgotten.aname), 
    IIF((instr([aname], ",") = 0), 
     Len(aname)-InStr(1,[aname]," "), 
     Len(aname)-InStr(1,[aname],",")))) 

    & " " & 

defense_final.middle_initial AS fullname INTO FinalForgottenWithMiddle 
FROM FinalForgotten INNER JOIN defense_final ON 

left(FinalForgotten.aname, 
    IIF((instr([aname], " ") = 0) AND (instr([aname], ",") = 0), 
    Len(FinalForgotten.aname), 
    IIF((instr([aname], ",") = 0), 
    InStr(1,FinalForgotten.[aname]," ")-1, 
    InStr(1,FinalForgotten.[aname],",")-1))) 

=defense_final.last_name AND 

right(FinalForgotten.aname, 
    IIF((instr([aname], " ") = 0) AND (instr([aname], ",") = 0), 
    Len(FinalForgotten.aname), 
    IIF((instr([aname], ",") = 0), 
    Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname]," "), 
    Len(FinalForgotten.aname)-InStr(1,FinalForgotten.[aname],",")))) 

=defense_final.first_name; 
+0

不適合我。我不太擅長VB。我希望堅持與SQL。 – JohnMerlino 2010-12-20 23:19:13

+0

VBA環境在告訴你語法錯誤在哪裏做得更好。而VBA做你在這裏做的事情要比你構建的SQL語句簡單得多。但每一個都是他自己的。如果我必須用SQL來做,那麼我會使用LIKE而不是InStr('[aname] LIKE「* *」'會得到與InStr([aname],「」)> 0')相同的結果。我在編輯時查詢了一下你的查詢,我想你可能只需要確保你到處都有括號。查看新編輯的答案以獲取建議。 – phoog 2010-12-20 23:41:42

0

線10

right(

沒有相應的右括號

+0

感謝您的回覆,但我添加了一個右括號,但然後得到一個語法錯誤,指出」Missing「,]或Item in查詢表達式「並將光標置於第一個AND上。 – JohnMerlino 2010-12-20 02:28:02

0

SELECT left([aname], 所以[aname]是一個文本字段。

IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0, 

如果這個條件爲真,你想向左字符串的長度爲:

FinalForgotten.aname, 

這是不是一個整數。你想:

SELECT left(
    [aname], 
IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0, 
    Len(FinalForgotten.aname), 
+0

這是測試?對我來說,它仍然會有同樣的錯誤。 – JohnMerlino 2010-12-20 13:36:57

0
IIF(instr([aname], " " = 0 AND instr([aname], ",") = 0, 

第12行應該是

IIF(instr([aname], " ") = 0 AND instr([aname], ",") = 0, 
+0

它仍然給出錯誤「Missing」,]或Item中的查詢表達式「 – JohnMerlino 2010-12-20 16:21:59

相關問題