Newsgroup: it.comp.appl.access
Titolo: unione di più valori dello stesso campo

supponiamo di avere una tabella nella quale sono presenti due soli campi,
chiamiamoli, p. es. "padre" e "figlio".
Ovviamente, ad ogni padre puň essere associato piů di un figlio creando piů
record.
Una volta ottenuti gli accoppiamenti padre e figlio, vorrei accodare i due
campi in un'altra tabella, dove perň i figli devono comparire in un solo
record tutti nello stesso campo. Potete darmi una mano?
Vi ringrazio
Salvatore

 ha scritto nel messaggio
news:9jugt1$fhe$1...@pegasus.tiscalinet.it...

Prima ho creato una tabella "chiavi" raggruppando i padri in modo che
comparissero tutti una sola volta, quindi ho scritto questo codice, provato
e funziona.
I risultati vengono salvati nella tabella "risultati" che ha due campi
"padre" e "figli", i dati sono separati da uno spazio.
Al posto di "Tua_Tabella" ci va il nome della tua tabella dati. Se mi dai i
Tuoi nomi reali te la posso riscrivere. Ciao, Arturo
----------------------------------------------------------------------------
------
Dim rst1 As Recordset, rst2 As Recordset, rst3 As Recordset
Dim t As Integer, padre1 As String, padre2 As String
Dim figlio As String, figli As String, num as Long
Set rst1 = CurrentDb.OpenRecordset("chiavi")
Set rst2 = CurrentDb.OpenRecordset("Tua_Tabella")
Set rst3 = CurrentDb.OpenRecordset("risultati")
rst2.MoveFirst
rst2.MoveLast
num = rst2.RecordCount
rst1.MoveFirst
rst2.MoveFirst
Do Until rst1.EOF
padre1 = rst1!padre
 For t = 1 To num
    padre2 = rst2!padre
    figlio = rst2!figlio
    If padre1 = padre2 Then
    figli = figli & " " & figlio
    End If
    rst2.MoveNext
 Next
If figli <> "" Then
rst3.AddNew
rst3!padre = padre1
rst3!figli = Right(figli, Len(figli) - 1)
rst3.Update
figli = ""
End If
rst1.MoveNext
rst2.MoveFirst
Loop
-------------------------------------------------

 > campi in un'altra tabella, dove però i figli devono comparire in un solo


 ha scritto nel messaggio
news:9jugt1$fhe$1...@pegasus.tiscalinet.it...

Io ho capito che tu hai una tabella (chiamiamola Tabella1) che contiene
tanti record quanti sono i figli dalla quale vuoi ottenere una tabella
(chiamiamola Tabella2) che contenga tanti record quanti sono i padri e che
ogni record di questa tabella deve avere un campo che contiene il nome di
tutti i figli del padre di quel record separati da uno spazio.
Se le cose stanno cosě.
Se Tabella1 contiene 3 campi: ID (contatore e chiave primaria), Padre
(testo), Figlio (testo).
Se Tabella2 deve contenere 2 campi: Padre (testo e chiave primaria), Figli
(testo o forse meglio memo).
Il risultato desiderato dovresti ottenerlo con il seguente cosice VBA:
'**** Inizio codice VBA ****
Dim rstTab1 As Recordset
Dim rstTab2 As Recordset
Dim FigliInsieme As Variant
Dim DepPadre As String
FigliInsieme = Null
'**** Svuota la Tabella2
DoCmd.RunSQL "Delete * FROM Tabella2"
'**** Apri  due recordset sulle due tabelle Tabella1 e Tabella2
Set rstTab1 = CurrentDb.OpenRecordset("SELECT " _
& "Tabella1.Padre, Tabella1.Figlio " _
& "FROM Tabella1 ORDER BY Tabella1.Padre, " _
& "Tabella1.Figlio;")
Set rstTab2 = CurrentDb.OpenRecordset("Tabella2")
'**** Posizionati sul primo record di Tabella1
rstTab1.MoveFirst
'**** Leggi tutti i record di Tabella1 e
'per ogni padre registra un record in Tabella2
Do Until rstTab1.EOF
    If IsNull(FigliInsieme) Then
        DepPadre = rstTab1!Padre
    End If
    If rstTab1!Padre <> DepPadre Then
        rstTab2.AddNew
        rstTab2!Padre = DepPadre
        rstTab2!Figli = FigliInsieme
        rstTab2.Update
        DepPadre = rstTab1!Padre
        FigliInsieme = Null
    End If
    FigliInsieme = FigliInsieme & _
    rstTab1!Figlio & " "
    rstTab1.MoveNext
Loop
'**** Registra l'ultimo record
rstTab2.AddNew
rstTab2!Padre = DepPadre
rstTab2!Figli = FigliInsieme
rstTab2.Update
'**** Chiudi i due recordset
Set rstTab1 = Nothing
Set rstTab2 = Nothing
'**** Fine codice VBA ****
Inserisci questo codice VBA dove ritieni piů opportuno, al limite in una
maschera che contiene solo un pulsante di comando a fronte dell'evento "Su
clic" del pulsante di comando.
Facci sapere se era quello che ti serviva.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 no?
Sì, se hai una tabella con valori univoci dei caposquadra usa quella come
"chiavi". Se hai problemi ad adattare il codice dammi i nomi esatti delle
tabelle e dei campi e te lo adatto io.
Ciao, Arturo


 ha scritto nel messaggio
news:WzC87.17992$0Z1.6...@news.infostrada.it...


 Inserisci questo codice VBA dove ritieni più opportuno, al limite in una


 ha scritto nel messaggio
news:WzC87.17992$0Z1.6...@news.infostrada.it...


 Ciao, Salvatore
 Devi aggiungere la libreria Microsoft ADO ai riferimenti.
Ciao
Arturo


Si, è dovuto al fatto che tu usi A2000, che di default fa riferimento alle
librerie ADO.
Il codice VBA che ti ho postato fa invece riferimento alle librerie DAO,
quindi occorre che aggiungi ai riferimenti del tuo database le librerie DAO,
avendo cura che, nella lista dei riferimenti, precedano le librerie ADO.
Ti rammento che in questo NG è regola rispondere dopo e non prima dei
messaggi precedenti.



Ho impostato il database come da te suggerito.
Volevo chiederti se, perň, i riferimenti sono memorizzati sul database in
questione o sono validi per tutti gli altri database aperti sul mio PC.

 ha scritto nel messaggio
news:9k1ujq$9sn$1...@lacerta.tiscalinet.it...

I riferimenti sono relativi al singolo database ed in esso memorizzati.
