Newsgroup: it.comp.appl.access
Titolo: Lista in orizzontale.

Il mio DB è composto da un archivio nominativi e da un elenco di
prestazioni che pratico a loro.
In una stampa dovrei far uscire la lista delle prestazioni praticate,
non in un elenco verticale bensi' in una lista orizzontale,
chiaramente se di una prestazioni ce n'è piu' di una unità ne deve
stampare solo una.
Mi dovrebbe uscire una stampa tipo:
Nominativo: Pinco Pallino
Prestazioni:  terapia, medicinale, trattamento, ecc, ecc. 
Adesso la faccio uscire così:
Nominativo: Pinco Pallino
Prestazioni: terapia
             medicinale
             medicinale
             medicinale
             trattamento
             ecc.
C'è qualche anima pia che sa darmi un aiutino ?
Grazie
MaurO

 ha scritto nel messaggio
news:dadb67f6.04021...@posting.google.com...

Prova  a postare ls truttura delle due tabelle.
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 Prova  a postare ls truttura delle due tabelle.
Spero ti siano sufficiente queste indicazioni, chiaramente ci sono
altri campi nelle tabelle.
Tabella ANAGRAFICA
Campi: Cartella (testo 6 carattteri)
       Nominativo (Testo)
Tabella RICHIESTE
        Cartella (relazionata con anagrafica)
        Consulenza (numerica, relazionata con CONSULENZE)
 
Tabella CONSULENZE
        ID (relazionata con RICHIESTE)
        Descrizione 
Grazie mile dell'aiuto che vorrai darmi.
 
A pesto


Scusami, ma mentre hai chiaramente indicato le chiavi esterne della tabella
RICHIESTE, non è per niente chiaro quali siano le chiavi primarie delle tre


...

Tabella ANAGRAFICA 
Campi: cartella (chiave - testo 6 carattteri)
       Nominativo (Testo)
       Tabella RICHIESTE
       Cartella (chiave - testo relazionata con anagrafica)
       Consulenza (numerica, relazionata con CONSULENZE)
       Tabella CONSULENZE
       ID (chiave - contatore - relazionata con RICHIESTE)
       Descrizione
è sufficiente ?


E' sufficiente per dettagliare la struttura delle 3 tabelle, le loro chiavi
primarie ed esterne ed il modo in cui esse sono in relazione tra di loro.
Da quello che scrivi però è evidente che c'è qualcosa che non va nella
struttura della tabella RICHIESTE e della sua chiave primaria; se, come
sostieni, Cartella è la chiave primaria di tale tabella, in essa può esserci
per una certa cartella (alias Nominativo) solo UN record e quindi la
relazione tra le tabelle ANAGRAFICA e RICHIESTE può essere solamente del
tipo uno-a-uno e non uno-a-molti come tu hai dichiarato nel tuo primo
messaggio.
A mio avviso dovresti aggiungere nella tabella RICHIESTE un campo ID di tipo
contatore che dichiarerai come chiave primaria, mentre Cartella diventerà
solo una chiave esterna.
Se sei d'accordo a modificare così la struttura di quella tabella, rifatti
vivo che vedremo di continuare il nostro discorso.


...

Certo, posso sempre fare come dici tu, ti ringrazio nin anticipo


Se la struttura delle tre tabelle è la seguente:
Tabella ANAGRAFICA
-------------------------
Cartella            Testo e chiave primaria
Nominativo      Testo
Tabella RICHIESTE
---------------------
IdRichiesta        Contatore e chiave primaria
Cartella             Testo
Consulenza        Numerico
Tabella CONSULENZE
-------------------------
ID                    Contatore e chiave primaria
Descrizione       Testo
Se le tabelle RICHIESTE e ANAGRAFICA sono in relazione uno-a-molti in base
ai rispettivi campi Cartelle.
Se le tabelle RICHIESTE e CONSULENZE sono in relazione uno-a-molti in base
ai rispettivi campi Consulenza ed ID.
In un module del tuo database registra la seguente funzione pubblica:
Public Function Orizzontale(Nomin) As String
Dim rst As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT ANAGRAFICA.Nominativo, " & _
"CONSULENZE.Descrizione " & _
"FROM CONSULENZE INNER JOIN (RICHIESTE INNER " & _
"JOIN ANAGRAFICA ON RICHIESTE.Cartella = " & _
"ANAGRAFICA.Cartella) ON 
CONSULENZE.ID
 = " & _
"RICHIESTE.Consulenza " & _
"GROUP BY ANAGRAFICA.Nominativo, " & _
"CONSULENZE.Descrizione;"
Orizzontale = ""
Set rst = CurrentDb().OpenRecordset(strSQL)
rst.MoveFirst
Do Until rst.EOF
    If rst!Nominativo = Nomin Then
        Orizzontale = Orizzontale & rst!Descrizione & ", "
    End If
    rst.MoveNext
Loop
Orizzontale = Left(Orizzontale, Len(Orizzontale) - 2)
Set rst = Nothing
End Function
Creati quindi una query di raggruppamento che abbia il seguente codice SQL:
SELECT ANAGRAFICA.Nominativo, Orizzontale([Nominativo]) AS Consulenze
FROM RICHIESTE INNER JOIN ANAGRAFICA ON RICHIESTE.Cartella =
ANAGRAFICA.Cartella
GROUP BY ANAGRAFICA.Nominativo;
A questo punto creati un report che abbia come origine record la query di
cui sopra.
