Newsgroup: it.comp.appl.access
Titolo: Trasformare un campo tabella in colonna

Ciao a tutti...
ho una tabella dove salvo le mail inviate e in tre campi (To, Cc, Ccn)
salvo i diversi indirizzi di posta elettronica, separati dal punto e
virgola.
Vorrei ottenere un elenco raggruppato degli indirizzi email inseriti
nella tabella di cui sopra.
Credo sia possibile, ma non so come.
Potreste aiutarmi?
Grazie e buona notte!
Paolo

 ha scritto nel messaggio 
news:1163029711....@k70g2000cwa.googlegroups.com...

 Ciao Paolo
i campi delle tabelle sono già le colonne della tabella...
Forse vuoi dire un campo di una query che raggruppi i valori dei tre campi 
di una tabella.
Se è così, senza usare il codice, puoi usare le query di unione.
Questo un esempio: crea tre query (e salvale), una per ogni campo usando lo 
stesso alias per il nome del campo:
SELECT TuaTabella.To AS Indirizzo
FROM TuaTabella
GROUP BY TuaTabella.To;
SELECT TuaTabella.Cc AS Indirizzo
FROM TuaTabella
GROUP BY TuaTabella.Cc;
SELECT TuaTabella.Ccn AS Indirizzo
FROM TuaTabella
GROUP BY TuaTabella.Ccn;
Poi la query di unione che va scritta a manina:
Select * from q1 union all select * from Q2 union all select * from Q3;
Ciao, Carlo

 di una tabella.
[CUT]
Grazie Carlo per la risposta,
ma questo sarebbe stato semplice. Il problema è che all'interno di
ogni campo ho più indirizzi e-mail, separati da punto e virgola che
non so trasformare poi in un unica colonna raggruppata.
Ti faccio un esempio:
To                                                    Cc
                          Ccn
a...@a.it
;
a...@a1.it
;
a...@a2.it
;                 
b...@b.it
;
b...@b1.it
 
c...@c.it
a...@a.it
 
b...@b.it
;
 
c...@c.it
;
c...@c1.it
Dovrebbe diventare:
Email
a...@a.it
a...@a1.it
a...@a2.it
b...@b.it
b...@b1.it
c...@c.it
c...@c1.it
Forse così è un pò più chiaro.
Grazie
Paolo

Ti faccio un esempio:
cut
Mi sà che devi ricorrere al codice e con un bel ciclo accodi il tutto in un 
nuovo campo in una nuova tabella.
Se non ci riesci posta pure il problema...
Che versione di Access usi?
Come stai messo a codice?
Ciao, Carlo

 Ciao, Carlo
Uso Access 2000. Di codice ne utilizzo, ma non complesso. In questo
caso per la costruzione del ciclo, non saprei come concepirlo... Se mi
vuoi aiutare, vorrei capirlo bene!
Grazie
Paolo

 ha scritto nel messaggio 
news:1163074827.6...@k70g2000cwa.googlegroups.com...
Carlo Costarella ha scritto:


Grazie
Paolo
Volentieri.
Consiglio di usare una seconda tabella per accodare tutti i valori unici in 
quanto l'aggiunta di un campo alla tabella esistente non sarebbe sufficiente 
a contenere tutti i valori se, come immagino, hai una chiave primaria e non 
vuoi o non puoi avere record valorizzati solo con un campo.
A    B    Campo aggiunto
1    1
2    2
3    3
            1
            2
            3
Chiaro fin qui?
Il codice da realizzare deve fare più o meno questo:
Apre la tabella, legge il primo record del primo campo, fa un parsing di 
cosa c'è scritto e se trova dei punti e virgola (;) accoda i singoli valori 
in una nuova tabella. Quindi fa lo stesso per gli altri 2 campi...e così di 
seguito, fino alla fine del recordset.
Una domanda: i campi che contengono più indirizzi sono sempre separati da un 
";"? Il ";" compare sempre alla fine di tutti gli indirizzi come 
nell'esempio che hai fatto?
Ciao, Carlo 

 Ciao, Carlo
Grazie
Paolo

 nell'esempio che hai fatto?
Il ";" compare sempre tra un indirizzo e l'altro. Tra l'altro uso "6.76
Inviare e-mail con MSAccess utilizzando la libreria mapi32.dll",
dovrebbe essere tua?
Grazie
Paolo
Sě credo sia mia.
Questo esempio di codice che ti accludo comporta che nella tabella 
principale i campi siano tre e si chiamano To, Cc, e Ccn. I dati vengono 
accodati ad una tabella "Indirizzi" il cui unico campo si chiama "Indirizzo" 
ed č un testo da 255 caratteri.
Per perfezionare il codice potresti prevedere uno svuotamento prima del 
successivo riempimento della tabella temporanea.
Le funzioni prevedono l'uso del solo DAO. Se ADO non ti serve toglilo dai 
riferimenti e usa solo DAO. Se invece ti serve ADO devi dichiarare le 
variabili in modo esplicito (rcs as Dao.recordset).
Public Function AccodaIndirizziMultipli()
Dim rcs As Recordset, i As Integer, pos As Integer
Set rcs = CurrentDb.OpenRecordset("TIndirizzi")
'cambia TIndirizzi con il nome della tabella che contiene gli indirizzi
rcs.MoveLast
rcs.MoveFirst
For i = 1 To rcs.RecordCount
With rcs
Call AccodaIndirizzi(![To])
End With
rcs.MoveNext
Next i
rcs.MoveLast
rcs.MoveFirst
For i = 1 To rcs.RecordCount
With rcs
Call AccodaIndirizzi(![CC])
End With
rcs.MoveNext
Next i
rcs.MoveLast
rcs.MoveFirst
For i = 1 To rcs.RecordCount
With rcs
Call AccodaIndirizzi(![Ccn])
End With
rcs.MoveNext
Next i
rcs.Close
Set rcs = Nothing
End Function
Public Function AccodaIndirizzi(Indir As String)
Dim rcs1 As Recordset, ii As Integer, pos1 As Integer
Set rcs1 = CurrentDb.OpenRecordset("Indirizzi")
For ii = 1 To Len(Indir)
    pos1 = InStr(1, Indir, ";")
    If pos1 > 0 Then
        With rcs1
        .AddNew
        !Indirizzo = Mid(Indir, 1, pos1 - 1)
        .Update
        End With
    Indir = Mid(Indir, pos1 + 1, Len(Indir))
    ii = pos1
    Else
        If Indir <> "" Then
            With rcs1
            .AddNew
            !Indirizzo = Trim(Indir)
            .Update
            End With
        Exit For
        End If
    End If
Next ii
rcs1.Close
Set rcs1 = Nothing
End Function
Fammi sapere.
Ciao, Carlo 

 ed è un testo da 255 caratteri.

Va, va, va!!!
Funziona perfettamente. Farò solo qualche ritocco finale per adattarla
in pieno alla mia esigenza.
Ora non resta che studiarmela! Se ho difficoltà a capire qualcosa mi
riserverò di porti ancora qualche domandina.
Grazie ancora Carlo
Ciao
Paolo

 ed è un testo da 255 caratteri.

