Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [VB6]ridondanze in tabella

    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!!!!
    corri forest corri!!!

  2. #2

    ancora nulla?
    corri forest corri!!!

  3. #3
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    La "SELECT DISTINCT ....." estrae un solo record anche se è duplicato.
    La "SELECT DISTINCT ..... INTO ....." ti crea una nuova tabella con i
    soli records 'unici'
    La "SELECT DISTINCT ..... INTO ..... IN ..." ti crea una nuova tabella
    con i soli records 'unici' in un altro mdb.

    Cerca su MSDN degli esempi e te la cavi, presumibilmente coun una sola
    "SELECT DISTINCT ........ INTO ..... IN ...".

    Ciao,
    Ciao, Brainjar

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.