Newsgroup: it.comp.appl.access
Titolo: filtri su maschera...uno dopo l'altro (mantenendo i precedenti)

Saluti
ho una maschera (chiamiamola MAS1) basata su una tabella con una ventina di 
campi.
La maschera l'ho costruita "il più possibile simile ad excel" per un amico 
(quindi i dati si presentano nelle tipiche colonne di xl).
Ogni intestazione di colonna è rappresentata da un pulsante che contiene il 
nome del campo (es: RESPONSABILE, ADDETTO, AUTO,...)
Schiacciando il pulsante si apre una maschera popup (chiamiamola MAS2) che 
presenta le diverse possibilità di scelta (con una casella combinata). Dopo 
la scelta, cliccando ok, si filtra la maschera MAS1 in base al criterio 
scelto.
Per esempio, posso filtrare in questo modo, secondo il resposabile "LUIGI".
Ma se ora voglio filtrare rispetto all'addetto "MARCO" MANTENENDO IL FILTRO 
GIA' FATTO, ripetendo la procedura...la maschera presenta i record 
dell'addetto MARCO ma anche quelli di altri responsabili (non mantiene il 
filtro fatto sul responsebile LUIGI).
Come posso quindi fare più filtri su maschera (al limite non passando per 
maschere popup, anche se sarebbe meglio, per me) in modo che ogni filtro 
successivo mantenga comunque i risultati dei filtri precedenti?
Saluti e grazie ancora
Guido
-- 
in moto:
sfortunà tanti
fortunà pochi
bravi gnanca uno 


Perchè nella maschera popup non c metti una sottomaschera legata al filtro e
la prima maschera la lasci com'è
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it


è un'idea, ma la domanda è:
una volta che ho fatto la form popup che contiene anche il risultato del 
filtro...quando faccio un filtro ulteriore...si aprirà un'altra maschera 
popup? e per un altro filtro...un'altra maschera popup?
In modo da avere, per 5 filtri, 5 maschere popup sovrapposte?
Oppure, in qualche modo (ma dovresti dirmi come...ed è il nocciolo della mia 
domanda nel post iniziale), nella prima form popup che contiene i risultati 
del primo filtro, io posso fare un ulteriore filtro (che mantiene i 
risultati del precedente, s'intende) ed avere i risultati NELLA STESSA form 
popup?
Grazie



Creati una tabella temporanea e lì ci metti quello che vuoi sicuro di poter
lavorare un filtro alla volta



provo!
Resta il fatto che (a quanto capisco) non si possono fare filtri su maschere 
successivi, mantenendo i risultatidel filtro precedente...?


 popup?
questo si ottiene in modo semplice filter = filter & " and " & "altra 
condizione di filtro". E' un po piu' complicato ritoglierlo poiche' e 
necessario fare un parsing del filtro. A tale scopo, a suo tempo, ho 
usato una form che presentava il filtro "parsato" e dava la possibilita' 
di togliere il singolo spezzone. Purtroppo questa gestione e' inserita
in una piu vasta applicazione e non sono in grado, in breve tempo, di 
estrarti una cosa funzionante ti allego pero' alcune istruzione che ho 
usato:
----->Questo e' il codice che sta dietro la form
Carica una listbox dopo aver separato i singoli pezzi (delimitati da " 
AND ") in fase di uscita recupera solo i pezzi di filtro richiesti e 
reimposta il filtro
------>
Private Sub Form_Load()
Dim oPar As Variant
Dim oTok As New clsToken
Dim iTok As Integer
Dim sLbx As String
Dim lDelim As Integer
Set oPar = objAppl.ImmissioneParametri
oPar.Filter = Replace(oPar.Filter, Chr(34), "'")
oTok.Parse oPar.Filter, " AND ", True
sLbx = Chr(34)
For iTok = 1 To oTok.Count
    If Right(oTok.GetToken(iTok), 1) = ")" Then
         sLbx = sLbx & oTok.GetToken(iTok) & Chr(34) & ";" & Chr(34)
    Else
         sLbx = sLbx & oTok.GetToken(iTok) & " AND "
    End If
Next
Me!Lista.RowSource = Left(sLbx, Len(sLbx) - 1)
oTok.Parse Lista.RowSource, ";"
For iTok = 0 To Lista.ListCount - 1
     Me!Lista.Selected(iTok) = True
Next
End Sub
Private Sub Esci_Click()
Dim oAppl As Variant
Dim cLbx As Variant
Dim sLbx As String
Dim sFilt As String
Dim aAprePar As Variant
Dim aChiudePar As Variant
Set oAppl = objAppl.ImmissioneParametri
sFilt = ""
For Each cLbx In Me!Lista.ItemsSelected
     sLbx = Lista.Column(0, cLbx)
     sFilt = sFilt & sLbx & " AND "
Next
If sFilt <> "" Then
     sFilt = Left(sFilt, Len(sFilt) - 5)
End If
aAprePar = Split(sFilt, "(")
aChiudePar = Split(sFilt, ")")
If UBound(aAprePar) > UBound(aChiudePar) Then
     sFilt = sFilt & ")"
ElseIf UBound(aAprePar) < UBound(aChiudePar) Then
     sFilt = "(" & sFilt
End If
oAppl.Filter = sFilt
DoCmd.Close
End Sub
il problema sta nella classe clsToken. Puo' essere sostituita da una 
split (la otok.Parse) e da un ciclo sull'array restituito dalla split.
Torno a precisare. Vuole essere una base su cui poter lavorare.
--
ac

[cut]
P.S. La vora solo con "AND" per farla lavorare con "OR" avrebbe bisogno 
di qualche aggiustamento (non banale).
--
ac


si si.
Grazie per il contributo.
Il limite fondamentale è che, come li metti (in cascata), non puoi 
toghlierli (a ritroso).
O si?


 O si?
Non a ritroso ma a seguito di scelta. Il  codice che ho postato prevede 
un form con una listbox a scelta multipla. Tale list box (lista valori) 
viene caricata dal codice presente sulla form load che costruisce la 
stringa da caricare sulla Rowsource delimitata per ogni singola condizione
i.e.
aFilters = split(form.Filter, " AND ")
For i = 1 To ubound(aFilters)
    If Right(afilters(i), 1) = ")" Then
         sLbx = sLbx & aFilters(i) & Chr(34) & ";" & Chr(34)
    Else
         sLbx = sLbx & aFilters(i) & " AND "
    End If
Next
Me!Lista.RowSource = Left(sLbx, Len(sLbx) - 1)
.......
Gli items di listbox sono resi gia' selezionati.
i.e.
For i = 0 To Lista.ListCount - 1
     Me!Lista.Selected(i) = True
Next
........
A quel punto e' sufficiente deselezionare cio' che non interessa e 
confermare.
Questo viene eseguito nella funzione che ho legato ad un bottone di "Uscita"
Tale funzione ricostruisce il filtro per le condizioni che risultano 
ancora selezionate e lo riapplica al form
i.e.
For Each cLbx In Me!Lista.ItemsSelected
     sLbx = Lista.Column(0, cLbx)
     sFilt = sFilt & sLbx & " AND "
Next
.......
in sFilt ci sono le condizioni di filtro come vedi legate da "AND".
Ci sono altre istruzioni che servono per riarmonizzare la stringa di 
filtro che poi puo' essere riapplicata.
i.e. form.filter = sFilt
Per quello che serviva ai miei scopi funzionava e funziona (ovviamente 
nel formato originale) Qui ho sostituito i riferimenti alle mie 
"userclass" e non ho testato le modifiche.
cmq con un minimo di "manipolazione" si puo' anche andare a ritroso.
Immagino sia sufficiente togliere l'ultima condizione presente sulla 
stringa di filtro.
i.e
For i = 1 To ubound(aFilters) - 1
.....
Lo trovo meno duttile, anche se operativamente piu' rapido.
--
ac


resto dell'idea che i filtri all'excel non si possono riprodurre.
Se qualcuno ci riuscisse, gliene sarei grato.
Per il momento ho ovviato introducendo una maschea filtri multipli che, con 
la combinazione di molte combobox (corrispondenti alle "colonne" della mia 
maschera di visualizzaizone) lancia una query sensibile al contenuto di ogni 
combobox.
