Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

ciclo elimina records a condizione 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

ciclo elimina records a condizione access

Postdi miko » 04/07/11 22:38

ciao,
in uno stesso db ho una tabellaA con due colonne Min e Max, mentre in una altra tabellaB ho una colonna Totali.
devo confrontare i valori nella colonna Totali con i valori di Min e Max;
considerando il primo record di tabellaA, ed i suoi valori Min e Max, se un valore di Totali è minore di MIN oppure maggiore di Max devo eliminare interamente tutti i records corrispondenti di Totali, cioè quei records nei quali il campo Totali contiene un valore che non soddisfa la condizione precedente;
successivamente considero il secondo record di tabellaA, ed i suoi valori Min e Max, e se un valore di Totali è minore di MIN oppure maggiore di Max devo eliminare interamente tutti i records corrispondenti di Totali;
e così via fino all'ultimo records dei valori MIN e Max;
se durante l'elaborazione nella tabellaB non ci sono più records, perchè eliminati dal processo precedente, devo uscire dal ciclo;
per eliminare un record ho realizzato questo semplice codice:
Codice: Seleziona tutto
Private Sub Comando0_Click()
Dim criterio As String
Set DB = CurrentDb
criterio = "DELETE FROM tabellaB WHERE Totali = 78"
DB.Execute criterio
End Sub

il problema è che non riesco a realizzare il ciclo, facendo riferimento alle 2 tabelle, e non so se devo usare AND oppure OR per impostare la condizione WHERE.
come modifico la macro?
grazie ciao
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Sponsor
 

Postdi archimede » 05/07/11 09:43

Il codice non serve, dovrebbe bastare una query:
Codice: Seleziona tutto
DELETE B.* FROM tabellaB AS B WHERE NOT EXISTS (SELECT null FROM tabellaA AS A WHERE B.totali BETWEEN A.min AND A.max);
HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: ciclo elimina records a condizione access

Postdi miko » 05/07/11 11:08

ciao,
grazie archimede per il contributo;
proverò a realizzare la query;
ma se dovessi creare una macro come dovrei impostarla?
anche perchè ho dimenticato di inserire nel processo descritto nel post precedente che dopo aver esaminato il primo record devo ripristinare la tabellaB, quella dei Totali, con tutti i suoi valori iniziali, e poi successivamente ripetere il confronto con il secondo record della tabellaA.
credo che anche qui ci vorrà una tabella temporanea come ha fatto flash in un altro progetto.
saluti, grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: ciclo elimina records a condizione access

Postdi Flash30005 » 05/07/11 16:14

Prendi il codice della query e lo inserisci in un "Criterio"
poi esegui il Criterio ;)

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: ciclo elimina records a condizione access

Postdi miko » 05/07/11 20:10

buona sera,
seguendo i vostri suggerimenti ho creato un pulsante su una maschera che attiva la seguente macro:
Codice: Seleziona tutto
Private Sub Comando0_Click()
Dim criterio As String
Set DB = CurrentDb
criterio = "DELETE B.* FROM tabellaB AS B WHERE NOT EXISTS (SELECT null FROM tabellaA AS A WHERE B.totali BETWEEN A.min AND A.max)"
DB.Execute criterio
End Sub

la macro funziona ma non elimina tutti i records secondo il criterio ma solo alcuni;
per prova ho inserito solo 10 records in entranbe le tabelle;
la macro dovrebbe eliminare i records 1,3,6,9,10 invece elimina solo 6 e 10;
se dopo la prima esecuzione clicco nuovamente sul pulsante non succede nulla, i records che dovevano essere eliminati sono ancora presenti.
come devo modificare la macro?
saluti, grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: ciclo elimina records a condizione access

Postdi Flash30005 » 05/07/11 22:40

Dovrei crearmi le tabelle e provare ma...

quel codice inserito in una query fornisce il risultato voluto?
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: ciclo elimina records a condizione access

Postdi miko » 06/07/11 00:29

salve,
ti invio il file mdb per il test;
https://rapidshare.com/files/3177320296/ELIMINA_RECORDS_A_CONDIZIONE.mdb
oltre alla tabellaA e B ci sono altre 2 tabelle, C e D, identiche alla B per poter ripetere la prova, rinominandole;
non ho ancora provato con la query.
ciao buonanotte
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: ciclo elimina records a condizione access

Postdi Flash30005 » 06/07/11 00:46

Infatti la query eliminava solo due record
l'ho modificata
prova questa macro
Codice: Seleziona tutto
Private Sub Comando0_Click()
Dim criterio As String
Set DB = CurrentDb
criterio = "DELETE B.* FROM tabellaB AS B WHERE EXISTS (SELECT null FROM tabellaA AS A WHERE B.ID =A.ID And (B.totali < A.min or B.totali > A.max))"
DB.Execute criterio
End Sub



Ciao

EDIT: Mi ricordo che avevamo costruito una tabella dove c'era sia la somma il min e il massimo
come mai adesso ci troviamo due tabelle?
non è più semplice avere anche la somma dove c'è il min e max e cancellare i record con il criterio direttamente in questa tabella?
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-

Postdi archimede » 06/07/11 08:27

miko ha scritto:considerando il primo record di tabellaA, ed i suoi valori Min e Max, se un valore di Totali è minore di MIN oppure maggiore di Max devo eliminare interamente tutti i records corrispondenti di Totali, cioè quei records nei quali il campo Totali contiene un valore che non soddisfa la condizione precedente;
successivamente considero il secondo record di tabellaA, ed i suoi valori Min e Max, e se un valore di Totali è minore di MIN oppure maggiore di Max devo eliminare interamente tutti i records corrispondenti di Totali;
Non ero sicuro di aver capito la prima volta, e rileggendo mi è venuto mal di testa (non ho ancora preso il caffè).

Questa query (la mia originale) cancella tutti i records della tabellaB il cui campo totali non cade nell'intervallo min-max di nessuno dei records della tabellaA (cioè se c'è anche UN solo record in tabellaA il cui range min-max comprende totali, il record NON viene cancellato):
Codice: Seleziona tutto
DELETE B.* FROM tabellaB AS B WHERE NOT EXISTS (SELECT null FROM tabellaA AS A WHERE B.totali BETWEEN A.min AND A.max);

Questa query cancella tutti i records della tabellaB il cui campo totali non cade nell'intervallo min-max di almeno uno dei records della tabellaA (cioè se c'è anche UN solo record in tabellaA il cui range min-max NON comprende totali, il record viene cancellato):
Codice: Seleziona tutto
DELETE B.* FROM tabellaB AS B WHERE EXISTS (SELECT null FROM tabellaA AS A WHERE B.totali NOT BETWEEN A.min AND A.max);

Tu cosa vuoi fare?

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: ciclo elimina records a condizione access

Postdi miko » 06/07/11 20:16

Buona sera a tutti,
ho provato l'ultima macro di flash, funziona ed è adatta alla mia situazione;
i codici di archimede invece, il primo elimina solo alcuni records, lasciandone altri che devono essere pure eliminati;
il secondo elimina tutti i records della tabella, come descritto dallo stesso archimede, anche quelli che non devono essere eliminati.
Quest’ultima non va bene per la mia situazione.
si flash hai ragione
EDIT: Mi ricordo che avevamo costruito una tabella dove c'era sia la somma il min e il massimo...

Per rispondere ad entrambi inserirò un post nel topic "elimina e somma campi access", mi sembra più logico dal momento che si tratta di una integrazione-completamento della stessa elaborazione, e che spero chiarirà lo scopo della richiesta in questo topic.
grazie ad entrambi
ciao
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44


Torna a Applicazioni Office Windows


Topic correlati a "ciclo elimina records a condizione access":


Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti