Access 2000......VB6... ADO
problema eliminare le ridondanze, ossia i record uguali, all'interno di una tabella
Qualcuno di voi conosce un algoritmo per eliminare le ridondanze all'interno di una tabella(possibilmente con il codice)?
Di solito faccio così.... punto al primo record memorizzandone i campi facccio scorre tutta la tabella quando trova
un record uguale ai campi lo cancella e a fine procedura ne creo uno nuovo con i campi memorizzati...[ciclo]
servendomi di indici e contatorii passo al secondo al terzo e così via.....
fino ad adesso non avevo problemi! :-(
ho delle tabelle che contengono circa 6500 record cad. e vorrei velocizzare l'operazione
così ci metto una vita
cmq per controprova fornisco codice
Private Sub Command1_Click()
/ connessione
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
strcnxn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.path & "\contabilizzazione.mdb;Persist Security Info=False"
conn.Open strcnxn
Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM bolle order by fornitore desc", conn, adOpenDynamic, adLockOptimistic
Dim conta As Integer
conta = 0
Dim indice As Integer
indice = 0
/ conta i record
Do Until rs.EOF
indice = indice + 1
rs.MoveNext
Loop
/indice per controllo
Dim prom As Integer
prom = 1
/inizializzo un ciclo fincheè non sono uguali.....
Do Until prom = indice
/muovo al primo
rs.MoveFirst
/ passo i record nei campi
nr.Text = rs!nr
data.Text = rs!data
fornitore.Text = rs!fornitore
data_r.Text = rs!data_r
cantiere.Text = rs!cantiere
stornato.Text = rs!stornato
nr_fatt_storno.Text = rs!nr_fatt_storno
data_fatt_storno.Text = rs!data_fatt_storno
Do Until rs.EOF
/confronto ed eventuale cancellazione incremento del contatore se la cancellazione avviene
If nr.Text = rs!nr And data.Text = rs!data And fornitore.Text = rs!fornitore And data_r.Text = rs!data_r And cantiere.Text = rs!cantiere And stornato.Text = rs!stornato And nr_fatt_storno = rs!nr_fatt_storno And data_fatt_storno.Text = rs!data_fatt_storno Then
rs.Delete
conta = conta + 1
rs.MoveNext
Else
rs.MoveNext
End If
Loop
prom = prom + 1
/se il contatore indice l'avvenuta cancellazione creo un nuovo recordset con i dati memorizzati
If conta > 0 Then
rs.AddNew
rs!nr = nr.Text
rs!data = data.Text
rs!fornitore = fornitore.Text
rs!data_r = data_r.Text
rs!cantiere = cantiere.Text
rs!stornato = stornato.Text
rs!nr_fatt_storno = nr_fatt_storno.Text
rs!data_fatt_storno = data_fatt_storno.Text
rs.Update
/azzero il contatore
conta = 0
End If
/riparte il ciclo dal primo record
Loop
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub
i problemio sono due....
1 - il numero di record iniziali non è quello finale per i record cancellati (indice non sarà
mai uguale a prom e naturalmente blocca per le tabelle piccole e un "codice da usare in casa"
no problem!)
2 - la procedura risulta essere troppo lunga per le tabelle che ho adesso!!!! :-(
deve esserci un'altro modo!!!!!
help me!!!!

Rispondi quotando