Newsgroup: it.comp.appl.access
Titolo: listbox selezione multipla per filtrare i dati di una query

Cia e scusate ma sono sempre io. Avrei un altro problemino (per voi)
ma insormontabile per me, come posso, selezionando una listbox a
selezione multipla , usare i campi selezionati come parametro di
selezione su una query? Ringrazio in anticipo tutti quelli che
potranno aiutarmi, ciao ciao

 ha scritto nel messaggio 
news:3b4ccf78-d2af-4aa6...@25g2000hsx.googlegroups.com...

sito comune faq 4.11
http://tinyurl.com/57l3gt
ciao
Daniele 

 sito comune faq 4.11
http://tinyurl.com/57l3gt
ho guardato l'esempio 4.11 del sitocomune ma purtroppo non è quello
che fa per me, mi spiego meglio. In una maschera "ricerca avanzata"
vorrei mettere 5 listbox collegate a tabelle diverse e usarle come
parametri di una query che una volta aperta mi mostri i records
desiderati, è possibile? ciao


io di solito faccio cosi: metto una casella di testo vuota a fianco
della listbox.
seleziono i valori e man mano popolo la casella di testo mettendo dei
separatori tra i valori di solito ;
di solito sull'evento click o dopo aggiornamento, adesso bene non
ricordo.
un po' come si fa in outlook quando si selezionano più destinatari per
la medesima mail
poi uso la casella di testo cosi popolata per metterci un parametro
alla query.
del tipo select * from tabella where tuocampo in (forms!campo!...)
ecc...

io di solito faccio cosi: metto una casella di testo vuota a fianco
della listbox.
seleziono i valori e man mano popolo la casella di testo mettendo dei
separatori tra i valori di solito ;
 [risposta]
grazie per la risposta ma non ho ben compreso una cosa: mettendo una
casella di testo vuota a fianco della listbox, come faccio poi a
ricreare la stringa da passare come parametro alla query? (es:
"sergio" or "gianni" or "giulio"  visualizzando solo i record che
soddisfano la mia ricerca?) usandi il VBA c'eè qualche possibilità?
grazie

 ha scritto nel messaggio 
news:3286438a-1752-45db...@k13g2000hse.googlegroups.com...


ma, scusa, hai detto che stai usando una "listbox" (equivale a casella di 
riepilogo)
con selezione multipla.
a) adesso parli di 5 listbox, tutte con selezione multipla?
b) oppure, hai fatto confusione e, sono caselle combinate?
nel primo caso lascio ad altri il compito di aiutarti.
nel secondo caso vedi sul sitocomune la faq di Roberto
sincronizzare caselle combinate non associate.
ci sono anche altri esempi per fare maschera di ricerca.
Ciao
Daniele

 desiderati, č possibile? ciao
io di solito faccio cosi: metto una casella di testo vuota a fianco
della listbox.
seleziono i valori e man mano popolo la casella di testo mettendo dei
separatori tra i valori di solito ;
di solito sull'evento click o dopo aggiornamento, adesso bene non
ricordo.
un po' come si fa in outlook quando si selezionano piů destinatari per
la medesima mail
poi uso la casella di testo cosi popolata per metterci un parametro
alla query.
del tipo select * from tabella where tuocampo in (forms!campo!...)
ecc...
L'idea di Ciroteo potrebbe fare al caso tuo, prova a generare il filtro 
sulla selezione multipla
    For Each varItem In Me.Elenco1.ItemsSelected
        Me.Lista1 = Me.Lista1 & Me.Elenco1.Column(0, varItem) & vbCrLf 
'Chr(10)
        Me.Stringa = Me.Stringa & Chr(34) & Me.Elenco1.Column(0, varItem) & 
Chr(34) & " or Like ...."
        Me.Stringa2 = Me.Stringa2 & Me.Elenco1.Column(0, varItem) & ", "
    Next varItem
stringa e stringa2 sono caselle di testo dove mandare il filtro che poi 
puooi richiamare nella query
Ciao
-- 
Roberto da Parma 

 Roberto da Parma
Grazie roberto e stasera provo la tua soluzione perchè devo andare a
lavorare.
Comunque voglio essere piu' preciso su quello che devo fare: ho una
maschera con 5 listbox dove si visualizzano i dati di altrettante 5
tabelle (nominativi, provincie, obiettivi ecc, ecc,) tutti dati
presenti nella tabella in oggetto della query. Inoltre ho un'altra
listbox dove collegata ad una query dove visualizzare i risultati
filtrati. Queste prime 5 listbox vorrei poterle usare come parametro
di selezione nella query che mi visualizza i dati, cioe' questa query
è formata dai campi nominativi, provincie, obiettivi ecc. ecc., in
ogni campo della query voglio mettere dei parametri di ricerca presi
dalla (eventuale) selezione multipla delle listbox. Insomma potrei
selezionare 3 nominativi e una provincia e nessun obiettivo e la query
mi deve rendere tutti i records con i nominativi selezionati nella
provincia selezionata senza nessun filtro sull'obbiettivo, non è
semplice e lo capisco, ma spero si possa fare, ciao

 > Roberto da Parma
[risposta]
Ho provato il tuo codice roberto ma non va, parte del codice si colora
di rosso ma comunque non ho capito cosa intendi per elenco1, lista1 è
la listbox vero? Comunque è possibile estrarre i dati di una selezione
multipla di una listbox da passare come parametro ad una query? Ciao
ciao e grazie in anticipo

 ha scritto nel messaggio 
news:8086929b-df98-4136...@26g2000hsk.googlegroups.com...


Se hai copiato/incollato posso immaginare...tenta appunto di capire...
Elenco1 è la tua casella di riepilogo
Su stringa passi il valore della riga selezionata.
Quello che ti ho proposto è un esempio che tu dovresti adattare...non 
conoscendo i tuoi campi...quelli proposti sono generali.
Per quanto riguarda la l'ultima domanda è possibile, si tratta di creare una 
stringa valida in SQL.



[risposta]
Si Roberto, ho copiato e incollato perchè non capivo il codice che mi
hai proposto. Nella casella di riepilogo l'unico campo è obiettivi con
il relativo id (parlo di una sola casella di riepilogo perchè tanto il
codice potrà essere adattato a tutte le altre....). Credimi che sto
cercando innanzitutto di capire perchè un codice pronto e fatto da
altri, di cui non conosco i dettagli, potrebbe essermi solo utile per
il problema di ora senza arricchire la mioa conoscenza. quello che ho
capito è di popolare ad ogni selezione una casella di testo anche se
mi sfugge como posso inserire "or" oppure "and" nella striscia. Ciao

 ha scritto nel messaggio 
news:304cb645-11ac-4b19...@l64g2000hse.googlegroups.com...

Qual'è il problema...
ad ogni select nella casella di rieèilogo passi il valore più or o and a 
seconda della selezione, potresti ad esempio crearti di fianco alla casella 
di riepilogo un gruppo di opzioni OR e AND
Per cui su click (e quindi su selezione di una riga) nella casella di 
riepilogo a seconda dell'opzione che hai scelto componi la riga
es.
if gruppo=0 then str = str & Me.Elenco1.Column(0, varItem) 'nel caso non sia 
selezionato nè OR nè AND
if gruppo=1 then str = IIf(str="";Me.Elenco1.Column(0, varItem);str & " OR " 
& Me.Elenco1.Column(0, varItem)) 'in questo modo se è la prima selezione non 
inserisce l'OR all'inizio
if gruppo=2 then str = IIf(str="";Me.Elenco1.Column(0, varItem);str & " AND 
" & Me.Elenco1.Column(0, varItem))
Se lo fai ad ogni click puoi ottenere anche combinazioni di AND e OR.



[risposta]
grazie Roberto per la soluzione, ora ho tutto quello che mi serve per
arrivare al compimento del mio lavoro, lavorerò sul tuo codice, Ciao e
grazie di nuovo

Scusatemi di nuovo ma ci sto perdendo la testa. Dopo i consigli che mi
sono stati dati sono riuscito finalmente a fare ciò che volevo, cioè
in una casella di testo , selezionando la listbox, viene la stringa da
usare come parametro nella query (esempio: genova or napoli or
milano). Quello che però non capisco è che se passo questa casella di
testo alla query non mi da nessun record, o meglio, se nella casella
di testo c'è solo una località (es. milano) tutto funziona, però con
più località (es. milano or napoli) non mi viene restituito nulla. Ho
provato ad incollare il testo della casella di testo direttamente
nella query e non va, però se scrivo la stessa stringa
(identica!!!!!!!!!!!!!)  nei parametri della query, tutto funziona.
Domanda: cosa sbaglio? Ciao ciao

 ha scritto nel messaggio 
news:a2005cae-f960-4695...@m36g2000hse.googlegroups.com...
Scusatemi di nuovo ma ci sto perdendo la testa. Dopo i consigli che mi
sono stati dati sono riuscito finalmente a fare ciň che volevo, cioč
in una casella di testo , selezionando la listbox, viene la stringa da
usare come parametro nella query (esempio: genova or napoli or
milano). Quello che perň non capisco č che se passo questa casella di
testo alla query non mi da nessun record, o meglio, se nella casella
di testo c'č solo una localitŕ (es. milano) tutto funziona, perň con
piů localitŕ (es. milano or napoli) non mi viene restituito nulla. Ho
provato ad incollare il testo della casella di testo direttamente
nella query e non va, perň se scrivo la stessa stringa
(identica!!!!!!!!!!!!!)  nei parametri della query, tutto funziona.
Domanda: cosa sbaglio? Ciao ciao
Controlla che la stringa nell'esempio che hai proposto sia del tipo
like "milano" or "napoli"
Incluse le virgolette


 Roberto da Parma
[risposta]
Dunque Roberto: la stringa che mi viene sulla casella di testo
collegata ai criteri della query è del tipo Milano or Napoli or Siena
senza virgolette e senza like iniziale. Ti ripeto però che se
seleziono la listbox con solo un nome di città la query mi restituisce
i records desiderati mentre con più selezioni (milano or napoli) la
query rimane vuota. La query la aziono con un pulsante ed è collegata
alla casella di testo "stringa" e il paradosso, ed è questo che
veramente non capisco, è che anche se digito a mano like "milano" or
"napoli", oppure "milano" or "napoli o anche solo milano or napoli ,
non mi restituisce nulla, però se la stringa che viene visualizzata
nella casella di testo la copio e la incollo direttamente nei criteri
della query tutto funziona. in attesa di una risposta riproverò a
rifare tutto su un db vuoto. ciao ciao

 ha scritto nel messaggio 
news:e9d9af96-528c-4ebc...@f63g2000hsf.googlegroups.com...


Se mi mandi l'sql che passi in VBA posso vedere dove sbagli.


 Roberto da Parma
[risposta]
Allora roberto, la listbox si chiama elenco, la casella di testo si
chiama stringa il codice (attivato da un pulsante) è:
Dim varItem As Variant
stringa = ""
If Me!Elenco.ItemsSelected.Count = 0 Then Exit Sub
For Each varItem In Me!Elenco.ItemsSelected
stringa = stringa & Me!Elenco.Column(0, varItem) & " or "
Next varItem
stringa = Left(stringa, Len(stringa) - 1)
Dim Cont As Integer
For Cont = 0 To Me!Elenco.ListCount - 1
Me!Elenco.Selected(Cont) = False
Next Cont
so già che mi dirai che non va bene per quello che riguarda  " or"
perchè me lo aggiunge anche alla fine della seconda selezione, io
comunque l'ho cancellavo a mano (guardavo solo se funzionava). il
codice della query è :
SELECT dbo_ASSOCIAZIONI.id_asso, dbo_ASSOCIAZIONI.sigla_ass,
FROM dbo_ASSOCIAZIONI
WHERE (((dbo_ASSOCIAZIONI.sigla_ass)=forms!maschera1!stringa));
la maschera si chiama maschera1, spero che questo ti sia utile, avrò
fatto qualche pasticcio......
ciao ciao

 ha scritto nel messaggio 
news:62149eb8-865c-4633...@m45g2000hsb.googlegroups.com...






Senza fare ulteriori controlli sul resto del codice, l'sql non va bene 
perchè tu dovresti passare una cosa del tipo
sql = "SELECT dbo_ASSOCIAZIONI.id_asso, dbo_ASSOCIAZIONI.sigla_ass FROM 
dbo_ASSOCIAZIONI WHERE  (((dbo_ASSOCIAZIONI.sigla_ass) like " & 
forms!maschera1!stringa & "));"
currentdb.execute sql
dove appunto dentro la casella stringa hai qualcosa del tipo 'milano' or 
'napoli' (bada....così come è scritta)
in modo da ottenere una stringa del tipo
sql = "SELECT dbo_ASSOCIAZIONI.id_asso, dbo_ASSOCIAZIONI.sigla_ass FROM 
dbo_ASSOCIAZIONI WHERE  (((dbo_ASSOCIAZIONI.sigla_ass) like 'milano' or 
'napoli'));"


 Roberto da Parma
[risposta]
Grazie roberto per la tua grande disponibilità, purtroppo devo dirti
però che i tuoi sforzi non sono riusciti nel mio intento. Non riesco a
passare i parametri della listbox alla query perchè non riesco a
costruire il predicato necessario. Ho riletto tutti i post precedenti
facendo una ricerca su quesiti analoghi al mio e mi sono sorpreso per
due motivi, il primo è che molti rimandano la soluzione al problema
alla faq n° 4.11 del sitocomune anche se passare i parametri ad una
query è una cosa e filtrare report e maschere sono un altra; il
secondo è che non sono riuscito a trovare una soluzione al mio
quesito, convincendomi che filtrare una query con una listbox a
selezione multipla sia una cosa complicatissima al punto tale che non
molte persone sono in grado di farlo. Forse non è così però io ho
cercato di metterci tutto l'impegno possibile per approffondire la mia
conoscenza su access scontrandomi con i miei limiti e questo sarà uno
stimolo. Ti dico anche però che una soluzione al mio problema l'ho
trovata, magari macchinosa ma ugualmente funzionale. ho creato una
tabella (chiamata buffer) su cui accodare i valori selezionati dalla
listbox e ho inserito questa tabella nella query di selezione
collegando i campi uguali con un join in modo che la query mi
restituisca solo i campi contenenti i dati uguali a quelli della
tabella buffer, un filtro forse (anzi sicuramente) "anomalo" ma
ugualmente funzionale. Ti ringrazio comunque (e molto) per la tua (e
vostra) disponibilità. Mi riprometto di studiare un pò di più e anche
grazie al vostro gruppo usenet ci riuscirò, ciao ciao

 ha scritto nel messaggio 
news:85193777-795d-4068...@a1g2000hsb.googlegroups.com...


Mi dispiace che tu non sia riuscito a risolvere appieno il tuo problema, mi 
fa strano.
In fondo devi solamente recuperare i valori dalla listbox, una volta fatto 
questo devi portare il risultato nella forma compatibile con sql.
Giusto il passo di mandare i valori in una texbox ma devi mettere già i 
valori i modo che sostituendo in sql il nome del controllo con il suo 
contenuto, il risultato sia una stringa valida in sql.
Il consiglio è di partire con un singolo valore, poi due, ecc...
 sql = "SELECT dbo_ASSOCIAZIONI.id_asso, dbo_ASSOCIAZIONI.sigla_ass FROM
 dbo_ASSOCIAZIONI WHERE (((dbo_ASSOCIAZIONI.sigla_ass) like 'milano'));"
prova l'sql così....se funziona vai oltre
 sql = "SELECT dbo_ASSOCIAZIONI.id_asso, dbo_ASSOCIAZIONI.sigla_ass FROM
 dbo_ASSOCIAZIONI WHERE (((dbo_ASSOCIAZIONI.sigla_ass) like 'milano' or
 'napoli'));"
quindi l'origine sarà
 sql = "SELECT dbo_ASSOCIAZIONI.id_asso, dbo_ASSOCIAZIONI.sigla_ass FROM
 dbo_ASSOCIAZIONI WHERE (((dbo_ASSOCIAZIONI.sigla_ass) like " & tuatxt & 
"));"
dove tua txt dovrà avere valore
'milano' or 'napoli'


 - Mostra testo citato -
[risposta]
Ciao Roberto, è stata dura ma finalmente ora funziona solo che ho
dovuto togliere l'operatore like e sostituirlo con =, ed ho dovuto
passare  il contenuto della casella di testo (stringa) ad una
variabile e recuperarlo nella query , non capisco perchè con la
casella di testo non va comunque grazie ai tuoi consigli e
specialmente grazie alla tua pazienza sono riuscito a risolvere il mio
problema. Che dirti ancora? grazie e ciao ciao

 - Mostra testo citato -
un ultima annotazione, per recuperare il contenuto della variabile ho
dovuto fare una funzione a cui passo il valore della variabile e usare
la funzione come parametro della query, Ciao roberto e grazie ancora.