Newsgroup: it.comp.appl.access
Titolo: filtri multivalore

Buongiorno a tutti, qualcuno da dirmi se access prevede la possibilità di fare filtri multivalore su una colonna come prevede excel 
 
 
esempio (poter cliccare sia 2002 sia 2004 ottenendo 3 record)
nome  anno
-------------------
pippo  2002
pluto   2003
pippo  2004
pluto   2004
pippo  2005

 Buongiorno a tutti, qualcuno da dirmi se access prevede la possibilità di fare filtri multivalore su una colonna come prevede excel esempio (poter cliccare sia 2002 sia 2004 ottenendo 3 record)nome  anno-------------------pippo  2002pluto   2003pippo  2004pluto   2004pippo  2005
 
Se predisponi le cose tu lo permette... 
 
-- 
@Alex
 
 
----Android NewsGroup Reader----
https://piaohong.s3-us-west-2.amazonaws.com/usenet/index.html
 


ho sempre usato filtri singoli oppure multivalore ma scritti in un unica casella di testo splittandoli con uno spazio vuoto
ma non ho mai fatto un filtro che mi permetta di cliccare multivalori fra quelli in elenco
 
un consiglio su come fare?
 
 
 

 un consiglio su come fare?
 
Non esiste nulla di nativo che puoi richiamare... devi costruirti tu l'interfaccia per operare in quel modo... non è complicato in linea di massima... ma è da costruire.
Io l'ho fatto usando una Maschera Popup in modalità maschere continue associata ad un RS ADO, popolato con i dati di una Query costruita per esporre l'elenco valori selezionabili.
 
Il RS ADO è perchè, non voglio usare tabelle Temporanee esterne, ho aggiunto un campo Boolean che consente l'associazione ad una CheckBox per la selezione dei criteri.
Poi per costruire la WHERE filtro il RS con solo i Selected e ciclo per costruire la stringa:
NomeCampo IN(Val1,Val4, Val6 ecc...)
 
Su Unload applico alla Form Chiamante sulla propretà Filter la WHERE ricavata.
 
Molto banale ma funziona bene.
 
@Alex

 Il RS ADO è perchè, non voglio usare tabelle Temporanee esterne
 
Questa non l'ho capita
Non bastava anche una form con dati presi da query dao?
 


Roberto... ti manca l'immaginazione.
Se usassi una Query in una Form, questa non conterrebbe l'implementazione di un controllo CheckBox per la SELEZIONE dei criteri... non esiste nella Tabella di Origine.
Quindi per consentire le selezioni MultipleEstese, avrei solo 2 opzioni:
1) ListBox, ma in questo caso non mi piace esteticamente
2) TempTable con i campi della Query + il campo Selected, associo la Form alla TempTable e visualizzo le CheckBox di selezione accando ai Records 
 
Come ho detto non mi piace usare la TempTable, è una considerazione personale basata sull'idea di non avere dipendenze da oggetti esterni o il meno possibile, quando realizzo maschere riutilizzabili.
 
Per aggirare la cosa uso un RS ADO in memoria che sostituisce la Tabella Temporanea, e che implementa il campo Booleano SELECTED, in questo modo dal Form visualizza i dati e mi consente di Selezionare.
 
@Alex


l'idea mi sembra ottima ma non ho ben capito come  crei volante un campo boolean associato che resta memorizzato?
 
io avevo pensato di prevedere nativamente un campo selected proprio nella tabella principale e aprire una mascheda popop con origine record select distinct nomecampo, selected from miatabella order by id
e quando tolgono il filtro eseguo una query di aggiornamento che pone a 0 i campi selected a -1 della tabella di orgine
magari funziona anche il mio metodo, ma il tuo mi sembra migliore anche se non ho capito quel campo boolean come lo tieni memorizzato

 magari funziona anche il mio metodo, ma il tuo mi sembra migliore anche se non ho capito quel campo boolean come lo tieni memorizzato
 
Non funziona il tuo metodo prova a riflettere...
La Tabella ha 10 Records... ma non è detto che siano 10 le condizioni da filtrare in base a quel campo...
Esempio:
Paolo Rossi
Paolo Bianchi
Roberto Rossi
 
Se volessi avere come elenco Opzioni i Cognomi, saresti a Raggruppare o ad usare una DISTINCTROW... credi che il campo Booleano nella Tabella sarebbe editabile...?
NO ovviamente, quindi non sarebbe fattibile.
 
La base di premessa da considerare è sermpre quella di far funzionare le cose a prescindere dal Tipo di Campo, quindi a prescindere dal FieldType...
Quindi "in teoria" la cosa è fattibile con una Tabella Temporanea... ma come definisci i campi...?
Se li metti tutti poi trasferisci il problema allo SWITCH del controlSource nella Form, oppure devi definire il campo come Stringa con i problemi poi di capire poi qual'era il DataType del campo iniziale.
 
Gestendo un RS invece la creazione della Tabella in memoria è dinamica, e se l'estrazione del RS lo fai con ADO, anche la creazione del Campo Dinamico è banale copia incolla del campo del RS originale... ed a mio avviso più comoda.
Si fa tutto con pochissime righe di codice
 
La gestione dei RS in memoria o non associato la trovi quì:
http://www.riolab.org/index.php?option=com_content&view=article&id=135:recordset-non-associati&catid=46:access&Itemid=69
 
 
@Alex


ho optato per delle tabelle locali temporanee
esempio ho creato una tabella filtroAnno con 2 campi selected e anno
su click del filtro anno nella form elenco record una query accoda gli anni nella tabella filtroAnno che poi mi propone nella form popup 
con un pulsante che crea in modo dinamico il filtro e lo applica alla form
 
un pulsante X se cliccato svuota la tabella filtroanno e impsta filterON = false
 
è una possibile strada