2014-04-19 12 views
5

W MS-Access 2007, mam tabelę, [Test_Master], gdzie mam pole [DT_REPORT]. Chcę zaktualizować [Test_Norm_Due] by 2 months, jeśli pole [Size] = "small". Jeśli pole "Size" = "Med." to przez 3 miesiące. Tworzę poniżej zapytanie, ale rzuca ono Syntax error. Czy ktoś może pomóc.Tabela aktualizacji w 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

Czy jest to potrzebne w jednej instrukcji UPDATE? Po prostu przerwałbym to w trzech stwierdzeniach, o wiele łatwiej byłoby je przeczytać i zrozumieć później. Zrobiłbym coś takiego: 'UPDATE RBIA_Master SET RBIA_Master.RBI_Norm_Due = DateAdd (" m ", 2, [RBIA_Master]! [DT_REPORT]) WHERE RBIA_Master.Size =" small ";' – AleAssis

+0

Dzięki Pravin. Używam metody sugerowanej jako obejście. Działa dobrze. Skonfigurowałem wiele zapytań w makrze. Ale nadal wolałbym mieć jedno zapytanie o aktualizację. – Shakti

Odpowiedz

18

wierzę masz problem ze swoimi nawiasach - spróbuj gniazdowania je za pomocą zewnętrznego edytora tekstu (jak Notepad ++) dla lepszej widoczności - również używasz dodatkowych nawiasów, które są uzyskiwanie w drodze, spróbuj uproszczenia; i brakuje ci jednego warunku końcowego - co powinno się stać z Test_Norm_Due, gdy Rozmiar nie jest ani "mały" ani "med".

Zauważ, że składnia IIF jest:

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

Jesteś gniazdowania IIFs, więc nie powinno być coś takiego:

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

Spróbuj coś takiego (I połamał go w wielu wierszach po prostu spróbuj uczynić go bardziej widocznym dla ciebie).

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."})); 
Powiązane problemy