2014-04-19 8 views
5

In MS-Access 2007, ho una tabella, [Test_Master] dove ho un campo [DT_REPORT]. Voglio aggiornare [Test_Norm_Due] by 2 months se il campo [Size] = "small". Se il campo "Size" = "Med." allora da 3 mesi. Creo sotto interrogazione ma sta lanciando Syntax error. Qualcuno può aiutare.Tabella di aggiornamento in 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

Ti serve essere in una sola istruzione UPDATE? Vorrei solo romperlo in tre dichiarazioni, sarebbe molto più facile leggerlo e capirlo più tardi. Vorrei fare qualcosa del tipo: 'UPDATE RBIA_Master SET RBIA_Master.RBI_Norm_Due = DateAdd (" m ", 2, [RBIA_Master]! [DT_REPORT]) WHERE RBIA_Master.Size =" small ";' – AleAssis

+0

Grazie Pravin. Sto usando il metodo suggerito come soluzione. Funziona bene. Ho sequenziato più query in una macro. Ma preferirei comunque avere una singola query di aggiornamento. – Shakti

risposta

18

Credo di avere un problema con le parentesi - provare annidamento utilizzando un editor di testo esterno (come Notepad ++) per una maggiore visibilità - anche, si utilizza parentesi aggiuntive che sono sempre nel vostro senso, provare a semplificare; e ti manca una condizione finale - cosa dovrebbe accadere con Test_Norm_Due quando Size non è né "piccolo" né "med".

Si noti che la sintassi per IIF è:

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

Stai nidificazione IIFs, quindi si dovrebbe avere qualcosa di simile:

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

provare qualcosa di simile (ho rotto in più righe solo per prova a renderlo più visibile per te).

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."}));