Newsgroup: it.comp.appl.access
Titolo: Filtro in base a selezione

Ciao a tutti ho questo problema.Vorrei inserire in una maschera un
controllo che mi funzioni come  filtro in base a selezione senza dover
usare la barra applica filtro.
Come posso fare?
grazie in anticipo.
Saluti Dino

 ha scritto nel messaggio 
news:a833657c-8691-493a...@j20g2000hsi.googlegroups.com...

un caso simile l'ho risolto usando questo codice che si verifica in risposta 
all'evento su pulsante mouse su, cioè dopo aver selezionato all'interno del 
campo dove devi effettuare la ricerca. La routine imposta il valore di una 
variabile di tipo stringa chiamata StringaCerca e poi applica il filtro
Private Sub classe_MouseUp(Button As Integer, Shift As Integer, X As Single, 
Y As Single)
StringaCerca = Me.nomecampo.SelText
Me.Filter = "nomecampo like '*" & StringaCerca & "*'"
Me.FilterOn = True
End Sub
ti consiglio a questo punto di creare un pulsante cliccando il quale si 
mostrano di nuovo tutti i record
così dovrebbe funzionare, ma io non sono poi così smalizaito, magari 
qualcun'altro più esperto (e qui non mancano) potrà darci altri consigli.
Ciao Andrea 

 ha scritto nel messaggionews:a833657c-8691-493a...@j20g2000hsi.googlegroups.com...

Ciao Andrea Wrote
come prima cosa ti volevo ringraziare per il consiglio.
Ho provato la tua routine ma mi da questo errore di DEBUG :
"Impossibile far riferimento ad una proprietaì o ad un metodo per un
controllo a meno che non abbia lo stato attivo"
Il debug poi mi evidenzia questa riga di codice: StringaCerca =
Me.RacComune.SelText.
Premetto che ho inserito la funzione nell'evento Mouse SU ed ho
sostituito il nome campo generico con il nome di un campo che andro' a
selezionare.
Mi e' venuto in mente un'altra cosa (correggimi se sbaglio) devo
creare un controllo per ogni campo che voglio andare ha filtrare?
Aspetto tue notizie e... ancora GRAZIE MILLE.
Saluti Dino

Saluti Dino
il testo che selezioni deve essere nel controllo a cui è associato l'evento, 
quindi se la selezione non la fai nel controllo RacComune il codice non 
funziona.
Ricapitolando:
Private Sub RacComune_MouseUp(Button As Integer, Shift As Integer, X As 
Single, Y As Single)
StringaCerca = Me.RacComune.SelText       'la casella di testo in cui fai la 
selezione deve chiamarsi RacComune
Me.Filter = "RacComune like '*" & StringaCerca & "*'"      'il campo nella 
tabella dietro la maschera deve chiamarsi 
RacComune altrimenti metti il nome giusto
Me.FilterOn = True
End Sub
se non riesci magari posta anche il nome dei controlli attraverso cui 
filtrare e dei rispettivi campi della tabella
Purtroppo con questo metodo devi impostare questo codice dietro ogni evento 
su mouse up per i controlli attraverso i quali filtrare...
fammi sapere... Ciao Andrea 


Ciao Andrea Wrote.
Ho capito l'errore che facevo prima.Invece di attribuirlo alla casella
di testo avevo impostato l'evento su un pulsante di comando.
Andando ad impostare correttamente ottengo pero' non la filtrazione in
base a selezione ma e' come se disattivassi il filtro(cioe' come se'
dopo aver filtrato con l'apposito filtro andassi ha cliccare
sull'icona rappresentata dall'imbuto).
Esempio con il campo RacComune. Il primo Comune della lista e'
Milano ,io rintraccio Brescia e voglio filtrare tutti i record di
Brescia.
Posizionandomi sul campo lui mi ritorna sul primo record cioe' Milano.
Faro' sicuramente qualche altro errore?Quale?Aspetto tue notizie
Grazie e ciao.

Grazie e ciao.
ma tu vuoi selezionare una parte del testo da ricercare (ad esempio bre per 
selezionare brescia ma anche brescello) o semplicemente posizionarti sul 
controllo, ad esempio RacComune e filtrare tutti i record che in quel campo 
hanno come valore lo stesso di quello del record selezionato?
se vuoi filtrare in base all'intero contenuto del campo potrebbe essere 
comodo fare cosi:
l'evento che richiama il filtro è doppio clic, il codice il seguente:
Private Sub RacComune_DblClick(Cancel As Integer)
Dim CercaStringa As String
CercaStringa = Nz(Me.RacComune,"")    'impedisce che sia nulla la variabile
If CercaStringa ="" then                        'questo fa in modo che se il 
campo è vuoto non succede nulla
    exit sub
Else
Me.Filter = "RacComune like '*" & CercaStringa & "*'"
Me.FilterOn = True
End If
End Sub
in questa maniera facendo doppio clic sul controllo RacComune vengono 
filtrati tutti i record il cui contenuto è lo stesso di quello sul quale hai 
fatto doppio clic. Quindi se fai doppio clic su un record con Brescia 
filtrerà tutti i comuni Brescia
se il nome dei controlli è lo stesso del nome dei campi della tabella si può 
facilmente creare una routine valida per tutti i controlli.
Aspetto di sapere se funziona
ciao Andrea 


Ciao Andrea Wrote
Complimenti sei "MASSICCIO" la routine che mi hai scritto funziona
alla grande.
Nel filtrare pero' mi e' successo questo inconveniente :
Se io nel campo RacConume vado ad esempio a filtrare brescia mi
vengono presentati tutti i record contenenti Brescia.Se
volessi in quei record andare a filtrare ulteriormente altri dati ad
esempio filtrare il campo Prodotto dove trovo Pc.invece di farmi
vedere solo i Pc di Brescia mi filtra tutti i Pc contenenti nella
tabella.
Praticamente allulla il filtro precedente su RacComune.Ovviamente se
la stessa operazione la eseguo con il controllo sulla barra degli
strumenti ottengo il risultato voluto;cioe' mi visualizza solo i Pc
presenti nella citta' di Brescia.
Come si puo' fare?.
NB: Visto che abbiamo (anzi hai FATTO 30....)possiamo fare 31... devo
porti altri 2 quesiti:
1) Ho provato ha realizzare un pulsante per annullare il filtro(cioe'
il famoso imbuto)ma non mi funziona.
2)Se volessi creare un report capace di stampare solo quello che ho
filtrato,che tipo di riferimento dovrei impostare?
In attesa di una tua risposta non so' se puo' bastare ma ti rinvio
ancora un grosso GRAZIE compreso di auguri di buone feste..
Saluti Dino.

Saluti Dino.
forse cosě dovrebbe funzionare
il codice di seguito č scritto per 3 campi ma dovrebbe funzionare per 
qualsiasi numero di campi
Option Compare Database
Private strFilter As String  ' questa č una variabile valida per tutto il 
modulo
'qui ci sono le routine chiamate dal doppioclick
Private Sub campo1_DblClick(Cancel As Integer)
strFilter = strFilter & "and campo1 ='" & Me.campo1 & "'"
ApplicaIlFiltro
End Sub
Private Sub campo2_DblClick(Cancel As Integer)
strFilter = strFilter & "and campo2 ='" & Me.campo2 & "'"
ApplicaIlFiltro
End Sub
Private Sub campo3_DblClick(Cancel As Integer)
strFilter = strFilter & "and campo3 ='" & Me.campo3 & "'"
ApplicaIlFiltro
End Sub
'questa č la routine che costruisce e applica il filtro
Public Sub ApplicaIlFiltro()
Dim nrCaratteriTgl As Integer
nrCaratteriTgl = Len(strFilter)
nrCaratteriTgl = nrCaratteriTgl - 4
If Left(strFilter, 4) = "and " Then
    strFilter = Right(strFilter, nrCaratteriTgl)
End If
Me.Filter = strFilter
Me.FilterOn = True
End Sub
'questa č la routine associata al pulsante "imbuto"
Private Sub Interruttore6_Click()
Me.FilterOn =  False
strFilter = ""
End Sub
Per quanto riguarda il report se lo richiami dalla maschera mediante un 
pulsante metti come argomenti di apertura la variabile strFiltro e su open 
del Report imposti lo stesso filtro richamandolo dagli argomenti di 
apertura.
fammi sapere e ciao 

Saluti Dino.
'questa routine viene richiamata alla prssione di un pulsante nella maschera
'quindi sta sempre nel modulo della maschera con i filtri
Private Sub Comando7_Click()
DoCmd.OpenReport "table1", acViewPreview, , , , strFilter
End Sub
'questa routine viene richiamatasu apertura del report
'e filtra i record nel report
Private Sub Report_Open(Cancel As Integer)
If Not IsNull(Me.OpenArgs) Then
Me.Filter = Me.OpenArgs
Me.FilterOn = True
End If
End Sub
Ciao Andrea 


Ciao Andrea Wrote
scusa per il ritardo nel rispondere, ma ho potuto lavorare sul
software solo stamattina.
La routine che mi hai scritto vanno benissimo,riesco a filtrare su
quasi tutti i campi tranne che sui campi formato DATA.
Infatti appena clicco due volte sul campo ad Es DATA GARANZIA mi esce
la segnalazione dei debug Operazione prcedente annullata e quando
clicco sul pulsante DEBUG mi seleziona in giallo il seguente codice :
Me.Filter = strFilter.
Aspetto al piu' presto una tua risposta.Grazie mille.
Saluti Dino

 wrote:

Andrea sono sempre io Ho dei problemi anche con la routine
all'aperture del report.Il codice non riconosce Me.OpenArgs
e quando apro il report mi da il seguente messaggio di errore:
Impossibile trovare il metodo o il menbro dei dati.
Aspetto tue notizie
Ciao Dino.

 ha scritto nel messaggio 
news:b3c014a3-243b-4b86...@e10g2000prf.googlegroups.com...

ciao leggo solo ora quello che hai scritto...
sinceramente non capisco come mai non ti funziona, visto che lo ho testato 
io stesso su un db fatto da me.
Nella routine che avvia l'apertura del report dalla maschera hai impostato 
il codice che ti avevo suggerito?
Private Sub Comando7_Click()
DoCmd.OpenReport "table1", acViewPreview, , , , strFilter
End Sub
dove "table1" è il nome del report e comando7 ilpulsante che lo apre dalla 
maschera?
fammi sapere
Andrea

 ha scritto nel messaggio 
news:b3c014a3-243b-4b86...@e10g2000prf.googlegroups.com...

prova a fare cosi, nel pulsante che sulla maschera apre il report metti il 
seguente codice e togli il codice dal report
Private Sub Comando7_Click()
DoCmd.OpenReport "table1", acViewPreview, , strFilter
End Sub