Entra

View Full Version : Eliminare anagrafiche doppie da tabella access..


POZZYPOMPOLI
30-01-2008, 19:51
Ciao a tutti,

vi chiedo un grandissimo aiuto...

Ho un Database Access con una tabella semplice (senza collegamenti ad altre tabelle) di anagrafiche. Chiaramente la prima colonna ha un codice diverso per tutte le righe, ma in alcune tutti gli altri campi sono identici.

Come posso fare ad eliminare queste righe duplicate?

Chi mi aiuta sarà x sempre nel mio cuore!

D4rkAng3l
30-01-2008, 22:58
mmm mmm in mysql c'è un comando sql appostio per eliminare i record doppioni...ora non ricordo quale...ma visto che anceh acces dovrebbe usare SQL credo che ci sia qualcosa del genere

morskott
30-01-2008, 23:08
Ciao a tutti,

vi chiedo un grandissimo aiuto...

Ho un Database Access con una tabella semplice (senza collegamenti ad altre tabelle) di anagrafiche. Chiaramente la prima colonna ha un codice diverso per tutte le righe, ma in alcune tutti gli altri campi sono identici.

Come posso fare ad eliminare queste righe duplicate?

Chi mi aiuta sarà x sempre nel mio cuore!

Se sei donna te lo dico, se sei uomo......:O

se crei la tabella con l'attributo messo come unique risolvi

POZZYPOMPOLI
31-01-2008, 08:10
Se sei donna te lo dico, se sei uomo......:O

se crei la tabella con l'attributo messo come unique risolvi

il problema è che il db è protetto...

1) ho creato un nuovo db e ho importato la tabella (2700 anagrafiche)...ora modificabile

2) il problema che la prima colonna (progressivo) ha valore sempre diversi...

vi presento una mia amica gnocca!!:oink: ;)

Grazie ancora

morskott
31-01-2008, 18:52
il problema è che il db è protetto...

1) ho creato un nuovo db e ho importato la tabella (2700 anagrafiche)...ora modificabile

2) il problema che la prima colonna (progressivo) ha valore sempre diversi...

vi presento una mia amica gnocca!!:oink: ;)

Grazie ancora

Come resistere ad un così esplicito invito???

Bhe, per le anagrafiche esistenti un programmetto java che dovrebbe (e sottolineo il condizionale) fare al caso tuo sarebbeimport java.sql.*;

public class EliminaDoppioni{

/*
Sottintendo che la chiave primaria (che ho chiamato ID) e la colonna incriminata siano di tipo Stringa (varchar), sennò
cambiare i vari getString() con il valore giusto e che la tabella dei nominativi sia "MiaTabella"
*/
public static void elimina(Connection conn,String altraColonnaIdentici) throws Exception{
PreparedStatement ps=conn.prepareStatement("select * from MiaTabella"); //Prendo tutte le tuple dalla tabella delle anagrafiche
ResultSet rs=ps.executeQuery();
while (rs.next()){ //per ogni tupla nel db
String valoreColonna=rs.getString(altraColonnaIdentici); //prendo il valore della colonna incriminata
PreparedStatement ps1=conn.prepareStatement("select * from MiaTabella where ID<>? and "+altraColonnaIdentici+"=?"); //prendi tutte le tuple esclusa la presente (ID<>?) che hanno la colonna incriminata uguale
ps1.setString(1,rs.getString("ID"));
ps1.setString(2,valoreColonna);
ResultSet rs1=ps1.executeQuery();
while(rs1.next()){ //per ogni tupla che ho trovato
PreparedStatement ps2=conn.prepareStatement("delete from MiaTabella where ID=?"); //elimino la tupla doppiona
ps2.setString(1,rs1.getString("ID"));
ps2.executeUpdate();
ps2.close();
}
rs1.close();
ps1.close();
}
rs.close();
ps.close();
}

public static void main(String[] args) throws Exception{
Class.forName(driverPerAcces); //Esattamente non so il nome del driver per Access, googlando si trova
Connection conn=DriverManager.getConnection(url); //Mettere la url di connessione al db
elimina(conn,"ColonnaIncriminata");
conn.close();
}
}ma fatti un bel backup di tutto, non garantisco sulla sua correttezza, codice scritto in 30 secondi ricontrollato solo una volta (teoricamente mi sembra faccia la cosa giusta)