Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 6 su 6

Evitare di scrivere record doppi in tabella

  1. #1
    h0m3r non è in linea Scolaretto
    Ciao ragazzi,
    avrei bisogno del Vs aiuto per capire come evitare di scrivere dei dati "doppi" da una tabella ad un'altra. Mi spiego meglio, ho una tabella con alimentata con i seguenti dati:
    codice HTML:
    Rif	CodAge	TipologiaRitardo	NumeroTipologiaRitardo	VotoCumulato
    1101	101	   Ritardo	               4	              6
    1101	101	   Ritardo grave	       1	              3
    1101	101	   Ritardo lieve	       6	              3
    1104	104	   Ritardo	               4	              6
    1104	104	   Ritardo grave	       1	              3
    1104	104	   Ritardo lieve	       5	             2,5
    1106	106	   Ritardo lieve	       2	              1
    1111	111	   Ritardo lieve	       2	              1
    1114	114	   Ritardo lieve	       1	             0,5
    1116	116	   Ritardo	               1	             1,5
    1116	116	   Ritardo lieve	       4	              2
    Ho creato una funzione che analizza la tipologia di ritardo e se il campo NumeroTipologiaRitardo è >= 4 mi scrive in una tabella il Rif,CodAge, e un volore numerico = 8.
    Dim rs, rsIR As Recordset
        Dim db As Database
        Dim CountTipologiaRitardo As Integer
        
        Set db = CurrentDb
        Set rs = db.OpenRecordset("qryDettaglioRitardo", dbOpenDynaset)
        Set rsIR = db.OpenRecordset("tblIndiceRischio", dbOpenDynaset)
        
        rs.FindFirst "[Rif] is not null AND [TipologiaRitardo]='Ritardo lieve'"
        Do Until rs.NoMatch
            If CountTipologiaRitardo >= 4 Then
                rsIR.AddNew
                rsIR.Fields("Rif") = rs!Rif
                rsIR.Fields("CodAge") = rs!Rif
                rsIR.Fields("Agenzia") = rs!Agenzia
                rsIR.Fields("IndiceDiRischio") = 8
                rsIR.Update
            End If
        rs.FindNext "[Rif] is not nullAND [TipologiaRitardo]='Ritardo lieve'"
        Loop
    
    Fino a qui tutto bene perchè vengono scritti nella tabella di destinazione i record con "Ritardo lieve" con NumeroTipologiaRitardo>=4. Il problema è che quando un record viene inserito nella tabella non deve contenere un altro con lo stesso Rif (ad esempio 1101 che nella tabella d'origine ha 3 volte lo stesso Rif 1101), quindi dovrei fare in modo che se incontro lo stesso rif lo bypasso. il mio quesito è come posso fare???
    Perché se analizzo la tabella, ad esempio, con tipologiaRitardo = 'Ritardo' e trova un valore >=4 lo scrive nonostante ci sia già quel rif.
    Ho provato in questo modo ma non funziona:
        rs.FindFirst "[Rif] is not null AND [TipologiaRitardo]='Ritardo'"
        Do Until rs.NoMatch
        
        CountTipologiaRitardo = rs!NumeroTipologiaRitardo
        
            If CountTipologiaRitardo >= 4 Then
            
                rsIR.FindFirst "[Rif] <> '" & rs!Rif & "'"
                rsIR.AddNew
                rsIR.Fields("Rif") = rs!Rif
                rsIR.Fields("CodAge") = rs!Rif
                rsIR.Fields("Agenzia") = rs!Agenzia
                rsIR.Fields("IndiceDiRischio") = 8
                rsIR.Update
                rsIR.FindFirst "[Rif] <> '" & rs!Rif & "'"
                
            End If
        rs.FindNext "[Rif] is not nullAND [TipologiaRitardo]='Ritardo'"
        Loop
    
    Scusate se mi sono dilungato e magari non aver spiegato bene il problema.

  2. #2
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Ciao,
    Potrebbe bastarti, prima di effettuare l'inserimento, un DCount sulla tabella:

    If DCount("Rif", "tblIndiceRischio", "Rif=" & CodRif & " AND NumeroTipologiaRitardo >=" & Ritardo)>0 Then
        ' Il Record esiste
    Else
        ' Il Record non esiste
    End If
    
    TheTruster
    ℹ️ Leggi di più su TheTruster ...

  3. #3
    Sgrubak non è in linea Scribacchino
    Un'altra alternativa potrebbe essere, molto semplicemente, sfruttare una sola istruzione INSERT INTO SELECT combinata con DISTINCT?

    Personalmente non capisco molto quale possa essere la reale esigenza di ricopiare i dati da una tabella all'altra...

  4. #4
    h0m3r non è in linea Scolaretto
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    Un'altra alternativa potrebbe essere, molto semplicemente, sfruttare una sola istruzione INSERT INTO SELECT combinata con DISTINCT?

    Personalmente non capisco molto quale possa essere la reale esigenza di ricopiare i dati da una tabella all'altra...
    La prima tabella in realtà è una query che aggrega determinati record e che vanno scritti in una nuova tabella.

  5. #5
    h0m3r non è in linea Scolaretto
    Quote Originariamente inviato da TheTruster Visualizza il messaggio
    Ciao,
    Potrebbe bastarti, prima di effettuare l'inserimento, un DCount sulla tabella:

    If DCount("Rif", "tblIndiceRischio", "Rif=" & CodRif & " AND NumeroTipologiaRitardo >=" & Ritardo)>0 Then
        ' Il Record esiste
    Else
        ' Il Record non esiste
    End If
    
    TheTruster
    Giusto! Non ci avevo proprio pensato. Grazie

  6. #6
    Sgrubak non è in linea Scribacchino
    Quote Originariamente inviato da h0m3r Visualizza il messaggio
    La prima tabella in realtà è una query che aggrega determinati record e che vanno scritti in una nuova tabella.
    Se è una query, allora leggi i dati da una o più tabelle. Se i risultati della query li scrivi in un'altra tabella, di fatto stai ricopiando i dati da una tabella ad un'altra.

    Mi sfugge il significato tecnico di questa cosa. Magari c'è e io che son autodidatta non lo colgo. Per questo chiedevo.

    In ogni caso, se hai già una query, perché non aggiungere il DISTINCT ed evitare il codice?

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Evidenziare record doppi
    Da Lelec nel forum Microsoft Excel
    Risposte: 0
    Ultimo Post: 15-12-2018, 11:18
  2. evitare di visualizzare record doppi in datagrid
    Da morgami nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 10-10-2013, 19:15
  3. Msflexgrid, evitare campi doppi
    Da Eurofolle nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 10-04-2012, 18:30
  4. Eliminazione di record doppi
    Da assandri nel forum Microsoft Access
    Risposte: 8
    Ultimo Post: 24-11-2011, 19:20
  5. Salvataggio record doppi
    Da orydg75 nel forum Microsoft Word
    Risposte: 3
    Ultimo Post: 16-07-2009, 15:04