Newsgroup: it.comp.appl.access
Titolo: Query parametrica

Vorrei associare ad un record alcuni valori fissi (tipo voti/giudizi)
selezionando delle chkbox; lo scopo principale sarebbe quello di
visualizzare poi su un report i record in base alle chkbox selezionate
(potrebbe anche capitare che in un record sono selezionate più di una
chkbox).
In una scheda della maschera di inserimento volevo creare un pulsante che,
su pressione, mi aprisse il report contente la lista dei record, che
selezionerei da una serie di chkbox non associate (e cioè una copia delle
chkbox presenti nella scheda principale e che mi servono solo per scegliere
i criteri di selezione) presenti nella stessa scheda del pulsante.
Mi sono bloccato nel momento di creare la query; in pratica non so come dire
alla query: se seleziono il chkbox 1, allora prendi tutti i record in cui la
chkbox "Buono" (ad esempio) è selezionata, e così via.
In un precedente DB avevo "risolto" il problema creando tante query quante
chkbox avevo e tanti pulsanti cui associare ogni query, ma mi sembra forse
eccessivo (anche perchè lì avevo solo 4 chkbox e adesso invece sono circa
20). Quando lanciavo la query, mi valutava lo stato della chkbox associata e
mi apriva il report visualizzando tutti i record che soddisfacevano quella
condizione.
Suggerimenti?
Grazie
Andrea

 condizione.
Sě, in effetti č un po' troppo complesso.
Il report di cui parli deve quindi essere basato su una query che (a meno 
di esigenze particolari) non ha una condizione di WHERE, come potrebbe essere, 
ad esempio:
SELECT * FROM tblOrdini
Nella maschera che fa da QBF, alla pressione del pulsante eseguirai il codice 
che ti serve per costruirti dinamicamente la condizione di WHERE (nell'esempio 
ho normalizzato le checkbox a False, nel caso non sia selezionato alcunché):
strWhereCondition = ""
strWhereCondition = strWhereCondition & "(campoCheck01 = " & Nz(Me!Check01, 
False) & ") AND "
strWhereCondition = strWhereCondition & "(campoCheck02 = " & Nz(Me!Check02, 
False) & ") AND "
strWhereCondition = strWhereCondition & "(campoCheck03 = " & Nz(Me!Check03, 
False) & ") AND "
strWhereCondition = strWhereCondition & "(campoCheck04 = " & Nz(Me!Check04, 
False) & ") AND "
strWhereCondition = Left(strWhereCondition, Len(strWhereCondition) - 5)
Quindi userai questa stringa poi come condizione di WHERE della DoCmd.OpenReport:
DoCmd.OpenReport "nomereport", acViewPreview, , strWhereCondition
--
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype: pbsoftsolution

>Scusa, ma non è per niente chiaro quello che intendi. Spiegati meglio.
Scusa per la "pedestrità" della spiegazione, vederlo a video era più facile
che a spiegarlo a parole.
INIZIO QUOTE============================
Il report di cui parli deve quindi essere basato su una query che (a meno
di esigenze particolari) non ha una condizione di WHERE, come potrebbe
essere,
ad esempio:
SELECT * FROM tblOrdini
Nella maschera che fa da QBF, alla pressione del pulsante eseguirai il
codice
che ti serve per costruirti dinamicamente la condizione di WHERE
(nell'esempio
ho normalizzato le checkbox a False, nel caso non sia selezionato alcunché):
strWhereCondition = ""
strWhereCondition = strWhereCondition & "(campoCheck01 = " & Nz(Me!Check01,
False) & ") AND "
strWhereCondition = strWhereCondition & "(campoCheck02 = " & Nz(Me!Check02,
False) & ") AND "
strWhereCondition = strWhereCondition & "(campoCheck03 = " & Nz(Me!Check03,
False) & ") AND "
strWhereCondition = strWhereCondition & "(campoCheck04 = " & Nz(Me!Check04,
False) & ") AND "
strWhereCondition = Left(strWhereCondition, Len(strWhereCondition) - 5)
Quindi userai questa stringa poi come condizione di WHERE della
DoCmd.OpenReport:
DoCmd.OpenReport "nomereport", acViewPreview, , strWhereCondition
FINE QUOTE=======================================================
Ho provato a fare come da te suggerito, ovviamente adattando il nome delle
chkbox con quella usate da me.
Ho fatto una prova solo con 7 chkbox, ma quando premo il pulsante che ho
creato come da te suggerito, mi appare un messaggio di errore in cui mi dice
che c'è una parentesi chiusa di troppo nella query, ma non riesco a capire
dove sia. In pratica ho fatto copia / incolla dal tuo post, cambiando i
nomi.
Nel messaggio di errore vedo che viene attribuito il valore 0 alle checkbox,
mentre selezionandone 1 il valore corrispondente mi passa a 1, per cui
suppongo che se non desse quell'errore, il report andrebbe a buon fine.
Andrea

 DoCmd.OpenReport "nomereport", acViewPreview, , strWhereCondition
Per capire se la stringa viene creata correttamente, commenta quella riga 
e sotto di essa inserisci la seguente:
    MsgBox "Questa è la condizione di WHERE:" & vbCrLf & vbCrLf & strWhereCondition
Non vedrai aprirsi il report, ma una messagebox con riportata la stringa 
costruita. Controllala e capirai dove è l'errore.


costruita. Controllala e capirai dove è l'errore.
Ho provato a fare così, ed effettivamente mi viene fuori la stringa
costruita.
Allora ho provato, nel codice che mi avevi postato all'inizio, a "variare"
le parentesi, ma nonostante tutto mi continua a dire che c'è una parente
chiusa di troppo.
ho provato varie combinazioni (eliminare parentesi, aggiungere parentesi),
ma niente, continua a darmi lo stesso errore
Andrea

 ma niente, continua a darmi lo stesso errore
Posta la stringa completa, cosě come restituita dalla message box.


Allora, problema risolto.
Sinceramente non ricordo più le combinazioni che avevo provato, ma
analizzando per bene la stringa che mi risultava dal msgbox ho corretto un
errore (si trattava di uno spazio mancante) e poi (mea culpa....) mi sono
accorto che in effetti richiamavo sempre la chkbox di selezione per creare
la condizione WHERE, invece di dirgli di verificare il valore del campo (in
pratica gli dicevo: se la chkboxA è selezionata vai a guardare i valori
della stessa chkboxA, invece di dirgli vai a guardare la chkbox1 correlata).
Chiedo ancora scusa per il tempo che ti ho fatto perdere, e grazie per la
disponibilità.
Andrea