Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

elimina e somma campi access

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: elimina e somma campi access

Postdi miko » 01/07/11 18:24

salve,
concordo con il tuo corretto ragionamento,
...non mi interessa il caricamento di 1000 o più record che farai solo la prima volta ma solo l'aggiornamento di una giornata..

ci avevo pensato;
riflettevo nella situazione in cui la tabella archivio contiene ad esempio 10.000 records, già calcolati, e bisognerà processare quelli che vengono inseriti giornalmente o dopo qualche giorno se l'aggiornamento non è giornaliero.
se la speditezza, tuttavia, richiede una nuova rielaborazione non importa il risultato ottenuto è ottimo.
vorrei, se possibile, che commentassi brevemente questa linea di codice, se non tutta almeno una porzione dal momento che è ripetitiva nella sua struttura e nel resto del codice:
Codice: Seleziona tutto
...
For NC = 1 To 10
        criterio = "UPDATE ArchTemp SET n" & NC & " = " & 0 & " WHERE ID >= " & IDAT & " And (n" & NC & " = " & N1M & " Or n" & NC & " = " & N2M & " Or n" & NC & " = " & N3M & " Or n" & NC & " = " & N4M & " Or n" & NC & " = " & N5M & " Or n" & NC & " = " & N6M & " Or n" & NC & " = " & N7M & " Or n" & NC & " = " & N8M & " Or n" & NC & " = " & N9M & " Or n" & NC & " = " & N10M & ")"
        db.Execute criterio
...

anche se ho compreso globalmente la sua funzione, considerata nel resto del codice, non capisco la sintassi nel suo dettaglio.
grazie ciao
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: elimina e somma campi access

Postdi Flash30005 » 01/07/11 18:36

E' molto semplice
se prendi la prima macro "didattica" (riporto solo due processi di Update)
Codice: Seleziona tutto
criterio = "UPDATE ArchTemp SET n1 = '" & 0 & "' WHERE ID <> " & 1 & " and (n1 = " & 1 & " Or n1 = " & 5 & " Or n1 = " & 6 & " Or n1 = " & 7 & " Or n1 = " & 8 & " Or n1 = " & 10 & " Or n1 = " & 12 & " Or n1 = " & 13 & " Or n1 = " & 17 & " Or n1 = " & 20 & ")"
db.Execute criterio
criterio = "UPDATE ArchTemp SET n2 = '" & 0 & "' WHERE ID <> " & 1 & " and (n2 = " & 1 & " Or n2 = " & 5 & " Or n2 = " & 6 & " Or n2 = " & 7 & " Or n2 = " & 8 & " Or n2 = " & 10 & " Or n2 = " & 12 & " Or n2 = " & 13 & " Or n2 = " & 17 & " Or n2 = " & 20 & ")"
db.Execute criterio

Noterai che nel primo criterio inserisce nel campo n1 uguale a 0 (se l'id è diverso) e se n1 è = 1 o = a 5 o...
I valori qui erano numerici non variabili
Nel secondo criterio crea l'update del campo 2 alla stessa stregua
ora se assegno le variabili al posto dei numeri con il listato che vedi su
Codice: Seleziona tutto
   
    N1M = Tabella("n1")
    N2M = Tabella("n2")
    N3M = Tabella("n3")
    N4M = Tabella("n4")
    N5M = Tabella("n5")
    N6M = Tabella("n6")
    N7M = Tabella("n7")
    N8M = Tabella("n8")
    N9M = Tabella("n9")
    N10M = Tabella("n10")

Dove tabella è Archivio
e creo un ciclo
For NC = 1 To 10

sostituire i campi n1 con n & NC confrontarlo con N1M, N2M etc etc
quello che può confodere solo le virgolette che in caso di variabili devono essere fuori dalle virgolette altrimenti diventano testo e la macro dà errore

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: elimina e somma campi access

Postdi miko » 07/07/11 09:46

ciao,
grazie per i chiarimenti forniti nel post precedente.
Vorrei aggiungere una ulteriore funzione alla macro;
Il mio db è costituito dalla Tabella ARCHIVIO_WINFORLIFE, dalla Tabella ArchTemp e dalla Tabella SommeMinMax i cui campi min e max contengono il risultato del calcolo ottenuto con la macro finale di flash del 29/06/11 di questo topic.
Fermo restando il risultato fin qui ottenuto con questa macro, ora usando la stessa macro devo eseguire una elaborazione leggermente diversa da quella precedente, modificando e/o aggiungendo del codice alla macro;
quindi la macro deve svolgere l’elaborazione di prima ed aggiungere quella che descrivo di seguito;
si tratta, come prima, di fare la sostituzione e la somma ma aggiungendo la eliminazione dei records secondo un criterio, e qui mi rifaccio all'altro mio topic "elimina records a condizione".
Introduco nel db una quarta tabella, TabellaC, con i campi ID, n1,n2,…n10, Somma;
quindi il db ha ora 4 tabelle, Tabella ARCHIVIO_WINFORLIFE, Tabella SommeMinMax, Tabella ArchTemp e TabellaC;
--------- PASSO 1- CONFRONTO TRA TABELLA ARCHIVIO_WINFORLIFE E TabellaC
qui il calcolo è analogo alla macro precedente, cambia solo una tabella;
1) considero i valori contenuti nei campi n1,…n10 del primo record della tabella ARCHIVIO_WINFORLIFE;
2) elimino momentaneamente nella TabellaC, in tutti i records ed in tutti i campi n1,…n10, tutti i valori uguali a quelli dei campi precedenti n1, .. . n10, del primo record di TabellaA;
3) nella TabellaC calcolo le somme, per riga, dei valori non eliminati e le inserisco, in corrispondenza di ciascun record, nel campo Somma della stessa TabellaC;
4) ripristino la TabellaC con tutti i suoi valori iniziali come era all’origine;
quindi ora la TabellaC avrà tutti i campi n1, …, n10 pieni come era all’inizio, con gli stessi valori iniziali, ed in più i valori delle somme.
--------PASSO 2- CONFRONTO TRA TABELLA SommeMinMax E la TabellaC
qui c'è l'ulteriore calcolo che vorrei introdurre, e per il quale si può usare la stessa Tabella ArchTemp;
5) considero ora i valori dei campi min e max del primo record della Tabella SommeMinMax;
6) elimino dalla TabellaC tutti quei records tali che la somma, calcolata al punto 3), sia più piccola del min, del primo record, di Tabella SommeMinMax, e tutti quei records tali che la somma sia più grande del max, del primo record, della stessa Tabella SommeMinMax;
quindi se ad esempio ho un min=28, un max =60, una somma in campo1=25 ed una somma in campo2=61, i due records corrispondenti a queste due somme devono essere eliminati.
quest’ultima è la piccola variante che devo introdurre nella macro.
A tale scopo avevo richiesto la macro che elimina i records a condizione.
La TabellaC ridotta nel numero dei records servirà per effettuare il resto del ciclo come descrivo successivamente:
1) considero ora i valori contenuti nei campi n1,…n10 del secondo record della Tabella ARCHIVIO_WINFORLIFE e ripeto il ciclo;
2) elimino momentaneamente nella TabellaC, in tutti i records ed in tutti i campi n1,…n10, tutti i valori uguali a quelli dei campi precedenti n1, .. . n10, del secondo record di TabellaA;
i punti 3) e 4) restano identici;
5) ora devo considerare i valori dei campi min e max del secondo record della Tabella SommeMinMax;
6) elimino dalla TabellaC tutti quei records tali che la somma, calcolata al punto 3), sia più piccola del min, del secondo record, di Tabella SommeMinMax, e tutti quei records tali che la somma sia più grande del max, del secondo record, della stessa Tabella SommeMinMax;
ripeto il ciclo dal punto 1) fino a considerare l'ultimo record della tabella ARCHIVIO_WINFORLIFE e gli ultimi valori min e max della Tabella SommeMinMax.
Se nel corso del ciclo in TabellaC non ci sono più records, perche eliminati dal processo precedente, esco dalla routine, ed avremo una tabella vuota.
spero nella chiarezza della mia richiesta e di aver dissipato eventuali dubbi.
Grazie ciao
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "elimina e somma campi access":


Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti