Newsgroup: it.comp.appl.access
Titolo: Filtro ListBox

Ciao
Uso Access97.
In una maschera ho un controllo testo(txtnome), una listbox (listnome)
collegata ad una tabella con un solo campo nominativi.
L'origine riga della list è impostata ad una query con il parametro like.
Dopo aggiornamento del controllo testo faccio il requery della list.
Se digito del testo nel controllo e poi premo invio la list viene
regolarmente filtrata.
E' possibile filtrare la list in base al testo digitato, aggiornandola ogni
volta che proseguo nella digitazione?
Cioè digito P appaiono tutti i nomi che iniziano per la lettera P se poi
proseguo digitando la I tutti quelli che iniziano per PI ecc.
Franco

 ha scritto nel messaggio
news:hBfra.25433$K35.8...@news2.tin.it...

Per fare quello che vuoi prima di tutto devi lavorare con l'evento keypress
e non aggiornamento, visto che vuoi aggiornare ad ogni carattere inserito.
Poi devi considerare non il valore del controllo (che ancora non c'è perchè
quanto inserito non è ancora "salvato") ma la proprietà Text (vedi help)
Ma la mia esperienza mi dice che la proprietà text non si riesce ad usarla
come riferimento nelle query (però prova sia mai che con qualche versione
moderna di access funziona)
A questo punto lo sporco trucco potrebbe essere quello di usare un controllo
nascosto.
Nell'evento keypress scrivi il contenuto di txtnome.Text nel controllo
nascosto e fai la requery della listbox
La query della listbox si riferirà al controllo nascosto con la sintassi
like nz([forms]![tuaform]![controllonascosto];"") & "*"
Antonio

 ha scritto nel messaggio
news:hBfra.25433$K35.8...@news2.tin.it...

Fermo restando quello che ti ha detto Antonio, vai sul Sito Comune (link qui
sotto) e nella Sezione General leggi la FAQ di Sib intitolata "Come creare
un controllo di ricerca". Con quello che è scritto sulla FAQ puoi filtrare
una maschera, ma con qualche ritocco puoi filtrarci la tua casella di
riepilogo, oppure puoi sostituire la casella di riepilogo con una maschera
con visualizzazione a Machere continue.
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

  Giustamente come previsto da Antonio la proprietà Text nella query non
funziona.
    Proverò a vedere l'altra soluzione e anche a trarre spunto dalla FAQ
indicata da Roberto.
    Fraò sapere il risultato.
 Franco

 Private Sub Txtnome_KeyPress(KeyAscii As Integer)
Me.nascosto = Me.Txtnome.Text
Me.LstNomi.Requery
End Sub
la query é:
 like nz([forms]![miaform]![nascosto];"") & "*"
ed è l'origine riga della ListBox
Sta succedendo questo: digito ad esempio r e la listbox continua a
visualizzarmi tutti i nomi solo quando digito la seconda lettera ad esempio
o, allora filtra la list trovando le corrispondenze che iniziano per ro, se
proseguo nella digitazione delle lettere solo dopo la quinta lettera
digitata filtra ulteriormente la lis.
Per quanto riguarda la FAQ del SitoComune, non ci chiappo niente.
Ho provato (da vero incapace) a dichiarare la variabile globale
utilizzando il codice della FAQ
Cioè:
dim ChiaveRicerca as String
Private Sub testo_KeyPress(KeyAscii As Integer)
Dim rst As Recordset
Dim str As String
If KeyAscii = 13 Then
    If Not IsNull(Me!txtnome.Text) Then
        Set rst = Me.LstNomi
        rst.FindNext "Nominativo like """ & chiavericerca & Me!TxtNome.Text
& "*"""
        Me.Bookmark = rst.Bookmark
        rst.Close
        Set rst = Nothing
        End If
        Me!txtnome.SetFocus
        Me!txtnome.SelStart = 255
        KeyAscii = 0
    End If
End Sub
Non succede proprio niente.
Dove sbaglio.
Franco

 Franco
La FAQ del Sito Comune filtra una maschera e non una casella di riepilogo,
quindi non puň essere usata in toto: filtrare una casella di riepilogo č
naturalmente diverso da filtrare una maschera.
Io ti ho suggerito di dare un'occhiata a quanto pubblicato nella FAQ perché
tu potessi capire che dovevi operare a fronte dell'evento "Su modifica"
della casella di testo in cui digitavi i valori di filtro della casella di
riepilogo e che dovevi usare il valore Text della casella di riepilogo per
effettuare il filtro.
Se perň come tu dici  con quanto letto sul Sito Comune "non ci chiappo
niente" (a proposito, sei mica toscano?), ripartiamo da zero.
Se hai una maschera chiamata Maschera1 che contiene una casella di testo non
associata chiamata Ricerca ed una casella di riepilogo non associata
chiamata Elenco.
Se la casella di riepilogo ha come origine riga il seguente codice SQL:
SELECT Id, Ditta
FROM Tabella1
WHERE Ditta Like [Forms]![Maschera1]![Ricerca] & "*";
Se vuoi che il contenuto della casella di riepilogo Elenco si aggiorni mano
a mano che digiti o cancelli un carattere nella casella di testo
Ricerca.
A fronte dell'evento "Su modifica" della casella di testo genera il seguente
codice VBA:
Private Sub Ricerca_Change()
Me!Ricerca = Me!Ricerca.Text
Me!Elenco.Requery
Me!Ricerca.SelStart = 255
End Sub


 Se però come tu dici  con quanto letto sul Sito Comune "non ci chiappo

Firenze, "ma si capisce poi cosi tanto dalla parlata?"
Perfetto è quello che volevo
Cercando di capire il codice: assegni al controllo ricerca come valore il
testo che viene digitato
non mi è molto chiaro l'utilizzo di SelStart. (anche se ho letto la guida)
esegui la requery della listbox
e avendo impostato la proprietà SelStart del controllo al numero massimo dei
caratteri che contiene , si imposta ogni volta la proprietà alla lunghezza
del testo esistente.
Grazie
Franco

 Franco


 Ora qualcosa c'ho chiappato
Ciao
Franco