Update tabella Access



  • Update tabella Access
    di gugluca (utente non iscritto) data: 27/02/2013 10:41:17

    Buongiorno a tutti..
    Ho una tabella fatta in questo modo:
    CampoA CampoB
    00ALFA Pippo
    00BETA Pluto
    0XALFA ?
    0XBETA ?

    Vorrei generare in VB un update sulla tabella fatto in questo modo:
    Dove i due caratteri a sinistra del CampoA sono = '0X' allora cerca i valori del campoA dove i primi due caratteri sono '00' e inserisci nel CampoB il valore trovato. Quindi la tabella deve diventare:
    CampoA CampoB
    00ALFA Pippo
    00BETA Pluto
    0XALFA Pippo
    0XBETA Pluto

    Avete qualche idea?
    Grazie per l'aiuto

    Luca



  • di Mister_x (utente non iscritto) data: 27/02/2013 11:47:56

    ciao

    in base ai tuoi dati esposti, sempre restando che questi siano esatti come inizio,
    una soluzione con formula matriciale e' la sequente da inserire in C1 e trascinare

    =SE(B1<>"";B1;INDIRETTO("B"&--(CONFRONTA(DESTRA(A1;LUNGHEZZA(A1)-2);DESTRA(A$1:A$100;LUNGHEZZA(A1)-2);0))))

    da confermare con ctrl+maiuscolo+invio
    vedrai riportato nella barra della formula quanto segue
    {=SE(B1<>"";B1;INDIRETTO("B"&--(CONFRONTA(DESTRA(A1;LUNGHEZZA(A1)-2);DESTRA(A$1:A$100;LUNGHEZZA(A1)-2);0))))}

    00ALFA Pippo Pippo
    00BETA Pluto Pluto
    0XALFA Pippo
    0XBETA Pluto
    00ALFA Pippo
    00BETA Pluto
    0XALFA Pippo
    0XBETA Pluto
    00ALFA Pippo
    00BETA Pluto
    0XALFA Pippo
    0XBETA Pluto

    ciao Mister_x





  • di gugluca (utente non iscritto) data: 27/02/2013 14:01:48

    Ciao,
    Grazie per la risposta
    In realtà la mia tabella è in access
    Pensavo di inserire un ciclo, while.. Wend.. Ma non capisco bene come impostarlo



  • di gugluca (utente non iscritto) data: 28/02/2013 08:43:52

    Qualcuno ha qualche idea su come impostare il ciclo?
    Io avevo intenzione di fare una cosa come indicata sotto, ma non si come impostare il codice..
    Come posso fare?
    Grazie per l'aiuto


     
    While not tabella.EOF
    tabella.Edit
    ...
    ...
    tabella.Update
    tabella.Movenext
    Wend



  • di Vecchio Frac data: 01/03/2013 17:38:17

    Ecco qui il pezzo di codice che opera la sostituzione richiesta.
     
    Sub subst()
    Dim rs As DAO.Recordset
    
        Set rs = CurrentDb.OpenRecordset("Tabella1")
        
        While Not rs.EOF
            If Left(rs!CampoA, 2) = "0X" Then
                rs.Edit
                rs!campoB = CurrentDb.OpenRecordset("SELECT CampoB FROM Tabella1 WHERE CampoA = '00" & Mid(rs!CampoA, 3) & "'")(0)
                rs.Update
            End If
            
            rs.MoveNext
        Wend
        
    End Sub






  • di gugluca (utente non iscritto) data: 03/03/2013 18:09:23

    Grazie mille per la risposta.
    Non avevo pensato ad impostare il ciclo in quel modo.

    Ora ho risolto

    Grazie ancora

    Luca



  • di gugluca (utente non iscritto) data: 04/03/2013 12:13:07

    Ciao,
    ho ancora un problemino..
    I valori '0X' che cerco possono non esser presenti fra i valori che iniziano con '00'.
    A questo punto vorrei mettere un default '0000'.
    Ho provato ad implementare il codice ma senza grande successo.
    Mi potreste aiutare?
    Grazie ancora di tutto.
    Luca


     
    Sub subst()
    Dim rs As DAO.Recordset
    
        Set rs = CurrentDb.OpenRecordset("Tabella1")
        
        While Not rs.EOF
            If Left(rs!CampoA, 2) = "0X" Then
                rs.Edit
                If CurrentDb.OpenRecordset("SELECT CampoB FROM Tabella1 WHERE CampoA = '00" & Mid(rs!CampoA, 3) & "'") is null then
                rs!campoB = '0000'
                Else
                rs!campoB = CurrentDb.OpenRecordset("SELECT CampoB FROM Tabella1 WHERE CampoA = '00" & Mid(rs!CampoA, 3) & "'")(0)
                End if
                rs.Update
            End If
            
            rs.MoveNext
        Wend
        
    End Sub



  • di Vecchio Frac data: 04/03/2013 14:54:27

    Più semplicemente: usa la funzione Nz.
     
    Sub subst()
    Dim rs As DAO.Recordset, s as String
    
        Set rs = CurrentDb.OpenRecordset("Tabella1")
        
        While Not rs.EOF
            If Left(rs!CampoA, 2) = "0X" Then
                rs.Edit
                s = "SELECT CampoB FROM Tabella1 WHERE CampoA = '00" & Mid(rs!CampoA, 3) & "'")
                rs!campoB = Nz(CurrentDb.OpenRecordset(s)(0), "0000")
                rs.Update
            End If
            
            rs.MoveNext
        Wend
        
    End Sub






  • di gugluca (utente non iscritto) data: 04/03/2013 15:16:49

    Ho provato ad utilizzare il codice ora, ma mi esce fuori l'errore: Nessu record corrente.
    Quando trova un valore '0X' senza un corrispettivo '00' non inserisce il valore "0000", ma va in errore..

    Non riesco a capire come mai



  • di Vecchio Frac data: 04/03/2013 20:58:05

    Hai ragione, non avevo studiato i casi possibili.
    Risolviamo con un secondo recordset invece dell'assegnazione diretta, e testiamo se conta almeno un record, altrimenti restituisce il valore di default.
     
    Option Explicit
    
    Sub subst()
    Dim rs As DAO.Recordset, rs2 As DAO.Recordset, s As String
    
        Set rs = CurrentDb.OpenRecordset("Tabella1")
        
        While Not rs.EOF
            If Left(rs!CampoA, 2) = "0X" Then
                rs.Edit
                Set rs2 = CurrentDb.OpenRecordset("SELECT CampoB FROM Tabella1 WHERE CampoA = '00" & Mid(rs!CampoA, 3) & "'")
                rs!campoB = IIf(rs2.RecordCount = 0, "0000", rs2!campoB)
                rs.Update
            End If
            
            rs.MoveNext
        Wend
        
    End Sub
    






  • di gugluca (utente non iscritto) data: 05/03/2013 23:00:36

    Grazie ancora di tutto.
    Ora funziona tutto a meraviglia.

    Ciao

    Luca