Newsgroup: it.comp.appl.access
Titolo: Query a campi incrociati

Salve a tutto il NG,
ho un problema con la rappresentazione, in un report, di una query a campi
incrociati, ovvero;
la query rappresenta la somma guadagnata in funzione di ogni prestazione,
per dipendente, quindi si ha: Intestazione riga:Descrizione
prestazione,Intestazione colonna:Dipendente,Valore riga:SommaImporto.
Il problema si pone se aggiungo un dipendente. Sul report mi visualizza
solo quelli esistenti alla creazione dello stesso e non quelli creati
successivamente.
Come fare?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it




Se il tuo problema è quello di adeguare dinamicamente un report ad una query
a campi incrociati, vai sul Sito Comune (link qui sotto) e nella Sezione
Reports leggi la FAQ di RoDAgo e Davide La Mantia (Sib) intitolata "4.7
Report dinamici per rappresentazioni a campi incrociati".
Quella soluzione risulta piuttosto complessa perché risolve alche il
problema di gestire colonne dislocate in pagine diverse e contigue: se
elimini tutto quanto riguarda quest'ultima opzione la soluzione risulta
abbastanza lineare.
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------

 Come fare?
Nel NorthWind (A97) c'č un esempio perfetto per te.
In alternativa potresti guardare sul sito comune.
Altrimenti, grosso modo, devi posizionare sul repot una serie di
controlli in numero maggiore delle colonne che prevedi di ottenere 
nella query. All'inizio i controlli sono tutti invisibili e non
associati.
Poi li rendi visibili, assegni il controlsource, la caption delle
etichette
ecc in funzione delle colonne della query che ti sarai aperta come
recordset.
Ciao
MArco
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 abbastanza lineare.
A dire il vero ci ho guardato, ma senza capirci granchè...
Lucio


 Lucio


 > Lucio
In pratica ho dato un'occhiata a quello che mi hai detto tu ma ci sono un
sacco di cose e non riesco ad individuare quale sia la porzione di codice
o il report di esempio che faccia a caso mio, in pratica il mio proble
consiste in questo:
la query a campi incrociati, origine del report funziona bene fino a
quando non aggiungo un'altro dipendente che non c'era al momento della
creazione del report, in pratica questo sul report non mi appare, quando
invece la query lo riporta comunque.
Vorrei solo capire come dire al report che mi deve caricare tutti i
riferimenti della query e non solo quei campi importati all'orgine.
Help me (altrimenti il mio capo non mi manda in ferie!)
Grazie


 -- 
Beh se ci sono di mezzo le ferie....
Abbandoniamo quanto pubblicato nel Sito Comune ed affrontiamo solo il
problema della personalizzazione dinamica di un report a seconda del numero
dei campi dell query a campi incrociati.
Occorre per prima cosa stabilire  a priori il numero massimo dei campi della
query a campi incrociati.
Se la tua query a campi incrociati si chiama MiaQuery
Se detta query può avere massimo 10 campi.
Creati un report tabellare non associato che abbia sia la sezione Corpo che
la sezione Intestazione pagina.
Nell'Intestazione pagina inserisci 10 etichette, una affiancata all'altra e
tutte non visibili: chiama le etichette, da sinistra a destra, Etichetta1,
Etichetta2 ... Etichetta10.
Nel Corpo del report in corrispondenza delle 10 etichette di cui sopra
inserisci 10 caselle di testo non associate e tutte non visibili: chiamale,
da sinistra a destra, Ctrl1, Ctrl2 ... Ctrl10.
A fronte dell'evento "Su apertura" del report genera il seguente codice VBA:
Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = "MiaQuery"
Dim qrd As DAO.QueryDef
Dim fld As Field
Dim Conta As Integer
Set qrd = CurrentDb.QueryDefs("MiaQuery")
Conta = 1
For Each fld In qrd.Fields
    Me("Etichetta" & Trim(Conta)).Visible = True
    Me("Etichetta" & Trim(Conta)).Caption = fld.Name
    Me("Ctrl" & Trim(Conta)).ControlSource = fld.Name
    Me("ctrl" & Trim(Conta)).Visible = True
    Conta = Conta + 1
Next
Set qrd = Nothing
End Sub
Il codice VBA di cui sopra fa riferimento alla libreria Microsoft DAO
quindi, se usi una versione di Access successiva ad Access 97, aggiungi ai
riferimenti del database Microsoft DAO 3.6 Object Librery.
Così facendo all'apetura del report verranno rilevati il numero ed i nomi
dei campi della query a campi incrociati: con il nome di ogni campo verrà
impostato il caption di una etichetta e l'origine controllo di una casella
di testo; veranno quindi rese visibili solo tante etichette e tante caselle
di testo quanti sono i campi della query.
Volendo si potrebbe creare "al volo" le caselle di testo e le etichette
necessarie senza prestabilirne il numero massimo, ma la cosa si
complicherebbe un pochino e visto che ci sono le ferie che aspettano... ;);
e poi la soluzione non funzionerebbe in un MDE o in un runtime.
