Newsgroup: it.comp.appl.access
Titolo: Semplice Update

Ciao Amici! Ho un Recordset, che chiameremo Saldi, composto da 2
campi: Risorsa e Importo. Esempio:
 
Risorsa 1     Importo 200
Risorsa 2     Importo 700
 
Domanda: è possibile, da vba, aggiornare il campo X della tabella Y,
con la somma degli importi?
 
Ho provato con:
CurrentDb.Execute "UPDATE Y SET Y.X = Sum(" & Nz(Saldi(1)) & ")"
e anche
CurrentDb.Execute "UPDATE Y SET Y.Y = Sum(" & Str(CDec(Nz(Saldi(1))))
& ")"
 
ma non funziona..
 


wrote:

Sicuramente si può fare in vba.
Ma non ho capito che somma vuoi fare.
 
La tua tabella è così:
Risorsa Importo
1        200
2        700
 
Vuoi scrivere 900 al posto di 200 e di 700?
Oppure vuoi sommare tutte le righe che hanno risorsa uguale ad 1 con
la loro somma (200) e tutte le righe con risorsa uguale a 2 con la
loro somma (700)?


Riporterò la domanda che ho letto infinite volte: cosa significa "non funziona?". ^_^
Prova:
CurrentDb.Execute "UPDATE Y SET Y.X = " & dSum("[Importo]","Saldi") & ";"
a meno che tu non voglia fare la somma della sola risorsa 1, per cui scrivi:
CurrentDb.Execute "UPDATE Y SET Y.X = " & dSum("[Importo]","Saldi", "[Risorsa]=1") & ";"
Ciao
Riccardo Baldinotti


Visto che voglio aggiornare il campo X della tabella Y, "non funziona"
significa che il codice non mi aggiorna.
Precisamente ho bisogno che il campo X della tabella Y, che ha come
valore zero, venga aggiornato a 900.
Non devo fare nessun raggruppamento per Risorsa, ma solo fare la somma
del campo Importo del recordset Saldi e scriverlo nella tabella Y
campo X.
Ho provato con
CurrentDb.Execute "UPDATE Y SET Y.X = " & dSum("[Importo]","Saldi") &
";"
ma neanche questo "funziona"
Voglio farvi notare che Saldi non è una tabella fisica, ma un
Recordset creato con il codice seguente:
Set Saldi = CurrentDb.OpenRecordset("SELECT RISORSA, IMPORTO ... ")
Posso anche spiegarvi il perchè di una operazione così strana, ma
nella realtà il codice è un po' più complesso,
e l'ho reso semplice per non complicare la vita. Comunque, se Vi
interessa, scrivo il codice vero:
 
        Set Sp = CurrentDb.OpenRecordset("SELECT RISORSA,
Sum(nz([EMOV])+nz([EARC])-nz([UMOV])-nz([UARC])) AS DIFFERENZA FROM
Salvator GROUP BY RISORSA HAVING (((Sum(nz([EMOV])+nz([EARC])-
nz([UMOV])-nz([UARC])))>0))")
        Set Sn = CurrentDb.OpenRecordset("SELECT RISORSA,
Sum(nz([EMOV])+nz([EARC])-nz([UMOV])-nz([UARC])) AS DIFFERENZA FROM
Salvator GROUP BY RISORSA HAVING (((Sum(nz([UMOV])+nz([UARC])-
nz([EMOV])-nz([EARC])))>0))")
 
        CurrentDb.Execute "UPDATE Jesus SET Jesus.POSITIVO = " &
DSum("[DIFFERENZA]", "Sp") & ""
        CurrentDb.Execute "UPDATE Jesus SET Jesus.NEGATIVO = " &
DSum("[DIFFERENZA]", "Sn") & ""

 DSum("[DIFFERENZA]", "Sn") & ""
 
Credo che il problema sia proprio nella funzione DSum applicata a un
Recordset. Ho riportato il codice in un modulo e al primo Execute mi ha
dato errore:
"Impossibile trovare la tabella o la query di input 'Sp'".
Allora ho creato due query, Sp e Sn, con il codice dei due comandi
OpenRecordset; finché non ho creato un record nella tabella Jesus, il
codice, ridotto ai due Execute, veniva eseguito senza dare errore ma
ovviamente nella tabella non compariva nulla (avrei dovuto eseguire un
INSERT INTO). Poi ho fatto un record inserendo nei campi 'positivo' e
'negativo' due valori qualunque, al che l'esecuzione del codice ha
modificato i valori.
Ciao
Riccardo Baldinotti
 
-- 
 
 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
 
 
 

On 17 Apr, 15:46, 
riccardo.baldino...@qualcosa.it
 (Riccardo

Tranquillo Riccardo don't worry!
Ho capito che non si può sommare un campo recordset con una sola riga
di comando,
bisogna ciclare il recordset oppure creare un'altra tabella "fisica" e
solo dopo sommare e aggiornare.
Grazie comunque dei suggerimenti ; )
Francesco

 solo dopo sommare e aggiornare.
 
Oppure usare le due query:
SELECT RISORSA,
Sum(nz([EMOV])+nz([EARC])-nz([UMOV])-nz([UARC])) AS DIFFERENZA FROM
Salvator GROUP BY RISORSA HAVING (((Sum(nz([EMOV])+nz([EARC])- 
nz([UMOV])-nz([UARC])))>0))
come Sp
e l'altra come Sn. A quel punto il comando UPDATE funziona.
Riccardo Baldinotti
 
-- 
