Qual'è il codice vba che permette di sommare i valori di un campo Recordset?

Anonimo
2012-04-17T10:24:37+00:00

Poniamo di creare un Recordset con il codice seguente:

Set Sp = CurrentDb.OpenRecordset("SELECT RISORSA, IMPORTO FROM Movimenti")

mettiamo che il Recordset venga popolato così:

Risorsa 1   Importo 200

Risorsa 2   Importo 300

Come faccio a sommare 200 e 300 ? Ho provato con questo codice: 

Set Ps = CurrentDb.OpenRecordset("SELECT Sum(" & Str(CDec(Nz(Sp(1)))) & ")")

ma quando vado a leggere Ps(0) mi dice "Tipo non corrispondente".

Tra l'altro, questa somma (500), dovrei aggiornarla nel campo x di una tabella "fisica" Y

Non è che si possa sommare e aggiornare tutto in una riga vba?

Tipo ad esempio:

CurrentDb.Execute "UPDATE Y SET Y.x = Sum(" & Str(CDec(Nz(Sp(1)))) & ")"

Se sì, come bisogna correggere quest'ultima riga di codice?

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-04-17T15:16:40+00:00

Ah ecco, l'apertura del recordset Sp che avevi mostrato faceva pensare che il campo importo era un campo della tabella Movimenti.

Non so di quanti records stiamo parlando relativamente ad Sp quindi puoi provare alternativamente

  • a ciclare Sp come ti avevo mostrato in precedenza in modo tale da recuperare il valore sommato all'interno della variabile dbTotale. Questa procedura in presenza di molti records potrebbe risultare più lenta della successiva.

oppure

  • crea una tabella di appoggio con 1 solo campo, Importo, e una query di accodamento con cui farai l'insert in questo campo del risultato della tua query così:

Insert Into TabellaAppoggio (Importo) SELECT Sum(nz([EMOV])+nz([EARC])-nz([UMOV])-nz([UARC])) AS IMPORTO FROM Temp HAVING (((Sum(nz([EMOV])+nz([EARC])-nz([UMOV])-nz([UARC])))>0))

a questo punto hai l'importo totale nel record della tabella di appoggio che potrai utilizzare per aggiornare l'altra tabella.

David

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-04-17T14:43:16+00:00

    Nella fattispecie, è questo:

            Set Sp = CurrentDb.OpenRecordset("SELECT RISORSA, Sum(nz([EMOV])+nz([EARC])-nz([UMOV])-nz([UARC])) AS IMPORTO FROM Temp GROUP BY RISORSA HAVING (((Sum(nz([EMOV])+nz([EARC])-nz([UMOV])-nz([UARC])))>0))")

    La risposta è stata utile?

    0 commenti Nessun commento