Dividere valori contenuti in una colonna, su più righe

di il
19 risposte

19 Risposte - Pagina 2

  • Re: Dividere valori contenuti in una colonna, su più righe

    E' evidente che la tabella di partenza non è in 1° forma normale dato che un campo non contiene valori atomici.
    Di quanti record stiamo parlando?
  • Re: Dividere valori contenuti in una colonna, su più righe

    @Alex ha scritto:


    Il concetto di base è che hai un'errore strutturale nelle tabelle, è evidente serva una Relazione 1-Molti per gestire le cose in modo semplice come lo hai chiesto.

    Alternativa è capire se proprio ti serve popolare una TABELLA... a quel punto serve una Funzione che leggendo la Tabella Base, cicla i RECORDS, sul campo EMAIL, vai a fare uno SPLIT del contenuto in un'array e crei un Ciclo per gli ITEMS dell'array al fine di effettuare degli ADDNEW nella Tabella di destinazione.

    La cosa è semplice ma come dicevo richiede una sufficiente autonomia.
    Grazie alex .. ho eseguito questa procedura ho svolto questo esercizio e funziona ..

    Altri riferimenti trovati in rete per scrivere la routine..
    a) in merito a come leggere record da una tabella
    http://forum.masterdrive.it/access-79/access-leggere-scrivere-dati-nelle-tabelle-tramite-vba-dao-13176/
    b) RecordCount per contare i record per fare il ciclo di lettura dei dati nella tabella di origine
    c) ciclo For.. next per leggere i dati
    d) split per creare una matrice
    e) UBound per contare la matrice per ciclare con un altro for.. next per la scrittura nella nuova tabella

    Gian
  • Re: Dividere valori contenuti in una colonna, su più righe

    Ciao,
    supponendo che tabella 1 contenga i campi da te citati e che tabella due sua il suo clone vuota, in cui esegui la divisione, prova questa sub :
    
    
    Public Sub parseFieldMail()
    
    Dim rst As DAO.Recordset, rst2 As DAO.Recordset
    Dim strString As String, strMail As String
    
    Set rst = DBEngine(0)(0).OpenRecordset("tabella1")
    Set rst2 = DBEngine(0)(0).OpenRecordset("tabella2")
    With rst
        Do While Not .EOF
            strString = .Fields("email")
            Do While strString <> strMail
                If InStr(strString, ";") <> 0 Then
                    strMail = Mid(strString, 1, InStr(1, strString, ";") - 1)
                    strString = Mid(Replace(strString, strMail, ""), 2)
                Else
                    strMail = strString
                End If
                With rst2
                     .AddNew
                     .Fields("gruppo") = rst.Fields("gruppo")
                     .Fields("società") = rst.Fields("società")
                     .Fields("email") = strMail
                     .Update
                End With
            Loop
            .MoveNext
        Loop
    End With
    Set rst = Nothing
    Set rst2 = Nothing
    End Sub
    
    
    un saluto.
  • Re: Dividere valori contenuti in una colonna, su più righe

    jack89c ha scritto:


    OsvaldoLaviosa ha scritto:


    Io non ho capito di cosa parla il tuo database. Per me che sono un musicista la parola Gruppo significa "gruppo musicale", per Berlusconi può significare "Fininvest". Società può essere una "squadra di calcio" oppure un'azienda SpA.
    Se descrivi tutti i nomi di tabelle, con tutti i loro campi e relazioni, io riesco a entrare nella tua testa più comodamente.
    Non riesco a capire cosa ti servano queste informazioni per creare la tabella che voglio...cmq parlano di centri commerciali come Gruppo Auchan Società del gruppo Simply IperSimply ecc queste tabelle sono collegate con dei codici che trovi anche nella tabella Sopra con una relazione 1 a Molti..1 Gruppo tante società di quel gruppo....io ho quelle email dei clienti così aggregate e voglio disagregarle come già detto per poi ottenere tramite il collegamento con queste tabelle: Pippo è il cliente di Simply che fa parte del gruppo Auchan ecc...
    Quest'ultima descrizione era opportuna affichè io capissi il contesto: ora è entrato nella mia testa. Per come descrivi il tutto sembra che fai confusione fra tabelle (ben normalizzate) e query. Assodato che 1 Gruppo--->molte Società. Secondo me Società e Clienti sono in relazione molti-a-molti attraverso la tabella Riferimenti che deve avere i seguenti campi:
    IDRiferimento (contatore, chiave primaria)
    Data
    IDSocietà (numerico)
    IDCliente (numerico)

    Relazioni:
    Società.IDSocietà uno-a-molti con Riferimenti.IDSocietà
    Clienti.IDCliente uno-a-molti con Riferimenti.IDCliente

    Per ottenere la visualizzazione che cerchi tu, occorre creare una query dove importi le tabelle Gruppi, Società, Riferimenti e Clienti e trascini i soli campi che ti interessa vedere: Gruppi.IDGruppo, Società.IDSocietà, Clienti.e-mail
  • Re: Dividere valori contenuti in una colonna, su più righe

    Goku ha scritto:


    ciao,
    supponendo che tabella 1 contenga i campi da te citati e che tabella due sua il suo clone vuota, in cui esegui la divisione, prova questa sub :
    
    
    Public Sub parseFieldMail()
    
    Dim rst As DAO.Recordset, rst2 As DAO.Recordset
    Dim strString As String, strMail As String
    
    Set rst = DBEngine(0)(0).OpenRecordset("tabella1")
    Set rst2 = DBEngine(0)(0).OpenRecordset("tabella2")
    With rst
        Do While Not .EOF
            strString = .Fields("email")
            Do While strString <> strMail
                If InStr(strString, ";") <> 0 Then
                    strMail = Mid(strString, 1, InStr(1, strString, ";") - 1)
                    strString = Mid(Replace(strString, strMail, ""), 2)
                Else
                    strMail = strString
                End If
                With rst2
                     .AddNew
                     .Fields("gruppo") = rst.Fields("gruppo")
                     .Fields("società") = rst.Fields("società")
                     .Fields("email") = strMail
                     .Update
                End With
            Loop
            .MoveNext
        Loop
    End With
    Set rst = Nothing
    Set rst2 = Nothing
    End Sub
    
    
    un saluto.
    Ragazzi Grazie mille a tutti e buon anno ma soprattutto grazie mille a Goku il codice che hai scritto funziona alla perfezione ora cerco di impararlo ed adattarlo grazie mille ancora
Devi accedere o registrarti per scrivere nel forum
19 risposte