Newsgroup: it.comp.appl.access
Titolo: Cancellare record duplicati - Come?

 
          Salve,
come si fa a cancellare da una tabella, per esempio in base ad almeno due
campi, tutti i record duplicati, naturalmente lasciando intatto il primo
inserito.
Questo non da query ma da codice.
Grazie 1000
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


Ciao.
Chissà perchè senza query.
Io farei così:
apro un recordset con solo i nomi (raggruppati) dei record duplicati con una
istruzione sql del tipo:
"SELECT DISTINCTROW First(Tabella2.Descrivi) AS DescriviCampo,
Count(Tabella2.Descrivi) AS NumDuplicati
FROM Tabella2
GROUP BY Tabella2.Descrivi
HAVING (((Count(Tabella2.Descrivi))>1));"
In questo modo ricavo il nome e il numero di duplicati per ogni valore.
Apro un secondo recordset con la tabella che mi interessa e con solo i nomi
(uno alla volta) duplicati
Una serie di cicli nidificati mi permetteranno di cancellare tutti i record
tranne uno tra i duplicati.
Meglio un esempio:
Public Sub EliminaDuplicati()
Dim MiaSql As String
Dim RCS As Recordset, i As Integer, ii As Integer
Dim RCScancel As Recordset
MiaSql = "SELECT DISTINCTROW First(Tabella2.Descrivi) AS DescriviCampo,
Count(Tabella2.Descrivi) AS NumDuplicati FROM Tabella2 GROUP BY
Tabella2.Descrivi HAVING (((Count(Tabella2.Descrivi))>1));"
Set RCS = CurrentDb.OpenRecordset(MiaSql)
RCS.MoveLast
RCS.MoveFirst
For i = 1 To RCS.RecordCount
    Set RCScancel = CurrentDb.OpenRecordset("SELECT Tabella2.* FROM Tabella2
WHERE (((Tabella2.Descrivi)=" & """" & RCS!DescriviCampo & """" & "));")
        RCScancel.MoveLast
        RCScancel.MoveFirst
            For ii = 1 To RCS!numduplicati - 1
               DoCmd.SetWarnings False
               DoCmd.RunSQL ("DELETE Tabella2.*, Tabella2.id FROM Tabella2
WHERE (((Tabella2.id)=" & RCScancel!ID & "));")
               DoCmd.SetWarnings True
            RCScancel.MoveNext
            Next ii
RCS.MoveNext
Next i
RCScancel.Close
RCS.Close
End Sub
OK funziona ma anche nel codice ho fatto abbondantemente uso di istruzioni
SQL (query appunto); perchè questa ostilità verso le query?
Ciao, Carlo

 
Gentilissimo Carlo,
vado subito a studiarmi la tua soluzione e ti pregherei, se puoi, di farmi
considerare (con un esempio) anche la soluzione con una normale query, i
campi per record da confrontare sono tre.
Ti ringrazio
Corrado



Ciao Corrado
ti ricordo che le risposte vanno date dopo tutte le altre e non in testa. In
ogni caso si taglia (cut) solo quella parte del messaggio che diventa poco
significativa: il NG è per tutti e non un dialogo tra due.
Detto questo, pena incorrere nelle giuste "cazziate" del Biso, puoi
utilizzare le istruzioni SQL presenti nel codice per crearti delle query
salvate.
Nel codice poi eseguirai le query salvate.
Ciao, Carlo

 ha scritto:

          "Biso": chi è?
Scusate l'ignoranza (mi sto rivolgendo a tutti..), ma la domanda che ho
fatto era diretta a Carlo perchè era collegata esattamente al suo intervento
precedente.
Cmq, quando si è ospiti è normale rispettare le regole di chi ti ospita,
altrimenti si vada altrove. Accetto il rimprovero di Carlo.
Saluti



Chi è il Biso? Chi è Antonio Biso?
Continua a frequentare questo NG o leggi i post precedenti e te ne accorgi
che è il Biso.
Comunque, Corrado, va tutto bene, sei il benvenuto in questa casa comune...
Nessun rimprovero solo suggerimenti.
Ciao, Carlo