Discussione:
query con paramerti passata a report
(troppo vecchio per rispondere)
Dario Sacco
2005-12-19 10:53:05 UTC
Permalink
Questa è una FAQ moltro frequente già postata, mi scuso per la
monotonia
ma non ho trovato niente di calzante sul SC o il NG.
Devo passare una query con parametri piuttosto complicata ad un report.
1)Ho una tabella "UtentiAttività" dove memorizzo le ore di lavoro
per ogni commessa per ogni utente, strutturata così:
'Data','IDUtente', 'IDCommessa', 'Ore'
2)Ho creato una query a campi incrociati
dove metto in riga la data e la commessa, in colonna 'IDutente'
e in valore le 'Ore'.
Quindi come prima cosa ho una query a campi variabili
poichè gli IDUtenti possono sempre cresere.
Inoltre siccome voglio poter filtrare per una certa commessa
devo passare un parametro testo per il rif. di commmessa.
3) Conosco già il sistema di passare il parametro
alla query con la sintassi [Forms]![Nomeform]![IDcomm param]
ma in questo modo devo creare tante query quanti scono
i conntesti dove voglio utilizzarla.
4)Con il metodo 'querydef' ho già trovato come
aprire un recordset parametrizzato da codice, con il costrutto:
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("query parametrizzata")
qdf.Parameters!IDCommessa = "2005113"
Set rst = qdf.OpenRecordset
5) Purtoppo non riesco a passare il recordset rst
al mio report, su evento openreport. Il problema del report dinamico
che si adatta al suo recordset non dovrebbe essere un problema
perchè lo stesso prob lo ho risolto nei form, però
mi sembra di capire che anche con Access 2003 PRO, non
c'è la possibilità di passare un DAO.recordset ad un Report.
E' vero?
Possibili soliìuzioni?
Dario Sacco
2005-12-19 11:09:04 UTC
Permalink
INTEGRAZIONE AL POST:
Aggiungo che è indispensabile fare delle query a cascata e cioè:
1) sulla tabella 'UtentiAttività' fare una query di selezione dove il
criterio è un parametro passato da codice (ovviamente)
2) infatti se facessi un filtro da report, avrei l'inconveniente di
avere molte colonne 'IDUtente' non significative, invece filtrando
prima ho solo quelle significative.
spero di esser chiaro.
GRAZIE
Roberto da casa
2005-12-19 11:54:31 UTC
Permalink
Post by Dario Sacco
Questa è una FAQ moltro frequente già postata, mi scuso per la
monotonia
ma non ho trovato niente di calzante sul SC o il NG.
Devo passare una query con parametri piuttosto complicata ad un report.
1)Ho una tabella "UtentiAttività" dove memorizzo le ore di lavoro
'Data','IDUtente', 'IDCommessa', 'Ore'
2)Ho creato una query a campi incrociati
dove metto in riga la data e la commessa, in colonna 'IDutente'
e in valore le 'Ore'.
Quindi come prima cosa ho una query a campi variabili
poichè gli IDUtenti possono sempre cresere.
Inoltre siccome voglio poter filtrare per una certa commessa
devo passare un parametro testo per il rif. di commmessa.
3) Conosco già il sistema di passare il parametro
alla query con la sintassi [Forms]![Nomeform]![IDcomm param]
ma in questo modo devo creare tante query quanti scono
i conntesti dove voglio utilizzarla.
4)Con il metodo 'querydef' ho già trovato come
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("query parametrizzata")
qdf.Parameters!IDCommessa = "2005113"
Set rst = qdf.OpenRecordset
5) Purtoppo non riesco a passare il recordset rst
al mio report, su evento openreport. Il problema del report dinamico
che si adatta al suo recordset non dovrebbe essere un problema
perchè lo stesso prob lo ho risolto nei form, però
mi sembra di capire che anche con Access 2003 PRO, non
c'è la possibilità di passare un DAO.recordset ad un Report.
E' vero?
Possibili soliìuzioni?
Scusami ma di due l'una: o io non ho capito il tuo problema, oppre tu ti
stai complicando maledettamente la vita.
Non mi è chiaro cosa significa che ti devi creare più query perché cambia il
contesto in cui ooperi: quale contesto?
Se ti crei una maschera popup in cui digiti i parametri ed apri tale
maschera tutte le volte che devi usare quella query a campi incrociati, non
capisco perché non sia sufficiente crearsi una sola Query ed una sola
maschera pr impostare i parametri.
Naturwalmente devi risolvere la problematica relativa alla gestione delle
query a campi incrociati parametriche, ma per questo è sufficiente andare
sul Sito Comune (link qui sotto) e nella Sezione Queries leggi la mai FAQ
intitolata "2.12 Query a campi incrociati parametrica".
Quanto poi per crearti un report dinamico per stampare i dati della query a
campi incrociati parametrica, nel Sito Comune, nella Sezione Reports, leggi
la mia FAQ intitolata "4.31 Report dinamici basati su query a campi
incrociati parametriche".
--
Roberto
-----------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
-----------------------------------------------
Dario Sacco
2005-12-20 07:51:13 UTC
Permalink
Post by Roberto da casa
Non mi è chiaro cosa significa che ti devi creare più query perché cambia il
contesto in cui ooperi: quale contesto?
Per contesto intendo, la situazione nella quale devo usare tale query.
Io attualmente se devo usare una query di accodamento
(per esempio per creare un calendario riferito
ancora ad una volta con un rif. di commessa ed un intervallo di date,
'DaData' e 'AData')
devo creare una query che faccia riferimento ad una maschera in
particolare
(che è quella che tu chiami di popup) dove specifico tali parametri.
Nella query faccio riferimento al parametro con:
Forms!FormPopup!IDCommessa..
Devo trovare il modo di lanciare la query e passare il parametro da
codice, senza fare rif.
ad una maschera perchè se volessi usare tale query da una altra form,
l'unico modo è creare una altra query.
Quella della maschera di popup può essere una soluzione, quando voglio
lanciare
una query passo sempre da lei settando già dei val di default...può
andare.
Ma cz! con c'è il modo di usare una query come se fosse una funzione??
GRAZIE
Roberto da casa
2005-12-20 09:12:57 UTC
Permalink
Post by Roberto da casa
Non mi è chiaro cosa significa che ti devi creare più query perché cambia il
contesto in cui ooperi: quale contesto?
Per contesto intendo, la situazione nella quale devo usare tale query.
Io attualmente se devo usare una query di accodamento
(per esempio per creare un calendario riferito
ancora ad una volta con un rif. di commessa ed un intervallo di date,
'DaData' e 'AData')
devo creare una query che faccia riferimento ad una maschera in
particolare
(che è quella che tu chiami di popup) dove specifico tali parametri.
Forms!FormPopup!IDCommessa..
Devo trovare il modo di lanciare la query e passare il parametro da
codice, senza fare rif.
ad una maschera perchè se volessi usare tale query da una altra form,
l'unico modo è creare una altra query.
Quella della maschera di popup può essere una soluzione, quando voglio
lanciare
una query passo sempre da lei settando già dei val di default...può
andare.
Grazie della concessione! :)
Post by Roberto da casa
Ma cz! con c'è il modo di usare una query come se fosse una funzione??
Proprio come una funzione no, altrimenti non si chiamerebbe query ma modulo,
sicuramente però puoi costruire con VBA dinamicamente una striga SQL
contenente il codice SQL della tua query debitamente personalizzato, quindi
imposti tale stringa SQL come origine record di una maschera o di un report
o con essa apri un recordset.
In alternativa, se vuoi usare invece una query registrata, puoi da VBA
modificare a tuo piacimento il suo codice SQL (nel tuo caso la parte
relativa la WHERE) e quindi utilizzare la query senza più bisogno di passare
i parametri: a questo punto non trattandosi più di query parametri non avrai
più i problemi lamentati. Un esempio di come modificare/creare da VBA il
codice SQL di una query registrata lo trovi sul Sito Comune (link qui
sotto), nella Sezione Query, nella mia FAQ intitolata "2.10 Come si può
creare in maniera dinamica una query con la tecnica QBF?".
Post by Roberto da casa
GRAZIE
Prego
--
Roberto
-----------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
-----------------------------------------------
Loading...