2014-04-19 2 views
5

MS-Access 2007에서 테이블이 [Test_Master]인데 여기에 [DT_REPORT] 필드가 있습니다. 필드 [Size] = "small" 인 경우 [Test_Norm_Due] by 2 months을 업데이트하고 싶습니다. 필드가 "Size" = "Med." 인 경우 3 개월. 아래 쿼리를 만들었지 만 Syntax error을 던지고 있습니다. 누군가 도와 줄 수 있어요.Access에서 테이블 업데이트

UPDATE Test_Master 
SET Test_Master.Test_Norm_Due = 
    IIF((([Test_Master]![Size]="small")), DateAdd(("m",2,[Test_Master]![DT_REPORT]))), 
     IIF((([Test_Master]![Size]="med.")), DateAdd(("m",3,[Test_Master]![DT_REPORT]))); 
+0

하나의 단일 UPDATE 문에 있어야합니까? 나는 단지 세 문장으로 깰 것이고, 나중에 읽고 이해하는 것이 훨씬 쉬울 것이다. 나는 다음과 같이 할 것이다 : 'UPDATE RBIA_Master SET RBIA_Master.RBI_Norm_Due = DateAdd ("m", 2, [RBIA_Master]! [DT_REPORT]) 어디에서 RBIA_Master.Size = "small"; ' – AleAssis

+0

감사합니다. 해결 방법으로 제안 된 방법을 사용하고 있습니다. 잘 작동합니다. 매크로에서 여러 쿼리를 시퀀싱했습니다. 하지만 여전히 단일 업데이트 쿼리를 선호합니다. – Shakti

답변

18

나는 당신이 당신의 괄호에 문제가 생각 - 큰 가시성 (++ 메모장 같은) 외부 텍스트 편집기를 사용하여 중첩 시도 - 또한, 당신은 단순화하려고 당신의 방식으로 점점 추가 괄호를 사용하는; 마지막 상태가 하나도 빠졌습니다. Size가 "small"또는 "med"가 아닌 경우 Test_Norm_Due에서 어떤 일이 발생해야합니까?

참고 IIF에 대한 그 구문은 다음과 같습니다 당신은 IIFs 중첩되어

IIF (condition, value if true, value if false). 

, 당신은 같은 것을해야하므로 :

IIF (condition, value if true, IIF(other condition, value if true, value if false)) 

을 이런 식으로 뭔가를 시도 (난 그냥 여러 라인에 파산 그것을 당신을 위해 더 잘 보이게하십시오).

UPDATE Test_Master SET Test_Master.Test_Norm_Due = 
IIF (([Test_Master]![Size]="small"), 
     DateAdd("m",2,[Test_Master]![DT_REPORT]), 
     IIF (([Test_Master]![Size]="med."), 
       DateAdd("m",3,[Test_Master]![DT_REPORT]), 
       {missing value - What happens if it's neither "small" nor "med."}));