2010-12-19 5 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

일 수있다 테이블에 SHORT (1 문자) 별칭을 지정하고 질문을 업데이트 하시겠습니까? 이렇게하면 더 읽기 쉽다고 생각합니다. –

+0

"잘못된 인수 오류"를 언급했습니다. 오류를 지정할 수 있습니까? 대개 필드의 철자가 틀릴 때 발생합니다. –

+0

@iDevlop 그것은 "쿼리 표현식에서 함수와 함께 사용 된 인수의 수가 잘못되었습니다 (왼쪽 ... (0123)) – JohnMerlino

답변

0

당신의 쿼리가이

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 기능에 그 논리를 넣어 쉬울 것 VBA를 사용하고 싶지 않다면 대신이 방법을 사용해보십시오. 나는 모든

InStr(x, y) = 0 
괄호

, 그래서

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

을 동봉 변화가 나를 SQL 파서 그것을 좋아한다는 것을 의미 쿼리 디자인 눈금으로 전환 할 수 만들기

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

된다 :

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

+0

VBA 환경은 구문 오류가 어디에 있는지 알려주는 훨씬 좋은 작업입니다. 그리고 여기서 수행중인 작업을 수행하는 VBA는 사용자가 생성 한 SQL 문보다 훨씬 간단합니다.그러나 각자는 자기 자신에게. SQL로이 작업을 수행해야한다면 InStr ([aname] LIKE "* *"'는'InStr ([aname], ")> 0'과 같은 결과를 줄 것입니다) 대신 LIKE를 사용합니다. 나는 당신의 질문을 약간 편집하고 있었고, 당신은 어디에서나 괄호가 있는지 확인해야 할 것입니다. 제안에 대한 새로 편집 된 답변을 참조하십시오. – phoog

0

라인 10

right(

에는 대응 우측 괄호

+0

답장을 보내 주셔서 감사합니다.하지만 오른쪽 괄호를 추가했지만"누락 "이라고 표시된 문법 오류가 발생합니다. 질의 표현식 "을 생성하고 커서를 첫 번째 AND에 놓습니다. – JohnMerlino

0

SELECT left([aname], 그래서 [aname] 텍스트 필드가 없다. 정수가 아닌

FinalForgotten.aname, 

을 :

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

이 조건이 좌 문자열의 길이가되고 싶은 사실이라면

. 당신이 원하는 : 라인 (12)에

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

테스트 되었습니까? 나에게 그것은 여전히 ​​같은 오류를 준다. – JohnMerlino

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

이어야

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

쿼리 표현식에 "Missing,] 또는 Item 오류가 계속 표시됨" – JohnMerlino

관련 문제