Newsgroup: it.comp.appl.access
Titolo: campo query con valori multipli

Salve e buon ferragosto a tutti!
Mi sapreste dire se esiste un modo per mettere sulla stessa riga (magari
separati da una virgola) tutti i valori di un campo di una serie di
record selezionati in una query?
Nel mio caso la query dovrebbe selezionare il titolo di un film e poi
raccogliere in un unico campo tutti gli interpreti separati da virgola.
Es:
questo è quello che ottengo normalmente:
TITOLO                   ATTORI
Via col vento            Vivien Leigh
Via col vento            Clark Gable
Via col vento            Olivia De Havilland
questo è quello che vorrei ottenere:
TITOLO                   ATTORI
Via col vento            Vivien Leigh, Clark Gable, Olivia De Havilland
NB: gli interpreti sono presi da un'altra tabella in relazione "molti a
molti" con la principale.
Spero di essere stato chiaro e vi ringrazio se vorrete aiutarmi,
Daniele
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 wrote in message
dcf91664026c9cf2f6a...@mygate.mailgate.org...

Se hai una tabella TITOLI che ha una struttura simile a questa:
IdTitolo            Contatore e chiave primaria
Titolo               Testo
ecc. ecc.
Se hai una tabella ATTORI che ha una struttura simile a questa:
IdAttore            Contatore e chiave primaria
Attore               Testo
ecc. ecc.
Se queste due tabelle sono in relazione molti-a-molti in base ad una tabella
chiamata TitoliAttori che ha una struttura simile a questa:
ID            Contatore e chiave primaria
IdTitolo    Numerico
IdAttore    Numerico
In un modulo del tuo database registra la seguente funzione:
Public Function CercaAttori(IdTitolo As Long) As String
Dim rst As DAO.Recordset
CercaAttori = ""
Set rst = CurrentDb().OpenRecordset("TitoliAttori")
rst.MoveFirst
Do Until rst.EOF
    If rst!IdTitolo = IdTitolo Then
      CercaAttori = CercaAttori & _
      DLookup("Attore", "ATTORI", "IdAttore =" & _
      rst!IdAttore) & ", "
    End If
    rst.MoveNext
Loop
CercaAttori = Left(CercaAttori, Len(CercaAttori) - 2)
Set rst = Nothing
End Function
Il risultato che cerchi l'ooterrai con una query che abbia il seguente
codice SQL:
SELECT TITOLI.Titolo, CercaAttori([IdTitolo]) AS ATTORI
FROM TITOLI
WHERE (((TITOLI.Titolo)=[Digita il titolo del film:]));
La funzione CercaAttori di cui sopra fa riferimento alla libreria Microsoft
DAO quindi, se usi una versione di Access successiva ad Access 97, aggiungi
al tuo database i riferimenti a tale libreria.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 al tuo database i riferimenti a tale libreria.
Ehm... scusa l'ignoranza ma come si fa ad aggiungere i riferimenti alle
libreria Microsoft DAO?
Esistono risorse su internet che spiegano come farlo?


 Esistono risorse su internet che spiegano come farlo?
Allora...
se apri l'help on line e cerchi riferimenti trovi un botto di esempi.
Penso anche lo stesso con una ricerca con motori di ricerca.
Comunque, aprendo un modulo, menù strumenti->riferimenti quindi spunti la
voce desiderata ponendola poi sopra quella ADO
Antonio

 Esistono risorse su internet che spiegano come farlo?
Ti ha risposto Antonio.
Se c'è ancora qualcosa di poco chiaro rifatti vivo.


 Antonio
Grazie, molto chiaro; sono riuscito ad aggiungere i riferimenti alla
libreria.
Nell'esecuzione della query, il modulo mi restituisce un errore
evidenziando in particolare questo pezzo:
      CercaAttori = CercaAttori & _
      DLookup("nome", "Attori", "ID_attore =" & _
      rst!ID_attore) & ", "
Vorrei specificare la struttura delle tabelle che utilizzo:
tabella FILM
ID_film             Contatore e chiave primaria
titolo               Testo
ecc. ecc.
tabella ATTORI
ID_attore            Contatore e chiave primaria
nome                 Testo
ecc. ecc.
Queste due tabelle sono in relazione molti-a-molti in base alla:
tabella LINK_ATTORI
ID_film              Numerico
ID_attore            Numerico
la funzione suggerita è stata così modificata:
  Public Function CercaAttori(ID_film As Long) As String
  Dim rst As DAO.Recordset
  CercaAttori = ""
  Set rst = CurrentDb().OpenRecordset("link_attori")
  rst.MoveFirst
  Do Until rst.EOF
      If rst!ID_film = Id_film Then
        CercaAttori = CercaAttori & _
        DLookup("nome", "ATTORI", "ID_attore =" & _
        rst!ID_attore) & ", "
      End If
      rst.MoveNext
  Loop
  CercaAttori = Left(CercaAttori, Len(CercaAttori) - 2)
  Set rst = Nothing
  End Function
Vi ringrazio ancora e chiedo scusa se sono così ignorante sui moduli...
è che cerco sempre di evitarli quando posso :-)


   Loop
Non riesco a vedere l'errore.
Cosa ti dice quando ti da l'errore su quel punto?
Io comunque farei questa modifica:
preparerei una query che leghi la link_attori con la tabella attori e dia i
campi di link_attori più il nome dell'attore.
A questo punto quando sei nel ciclo su un record che ha id_film quello
cercato, ti basta usare il riferimento a rst!nome invece di fare una
dlookup.
Infine...
EVITA di usare parole riservate per i nomi dei campi, come invece hai fatto
usando nome!!!
Antonio