Newsgroup: it.comp.appl.access
Titolo: ricerca su maschera "in tempo reale"

Buonasera, sto provando a creare una casella di ricerca su una maschera 
(che si appoggia su Miaquery) che mi restituisca i record corrispondenti 
al testo digitato nella casella cui il controllo "nome" coincida o ne 
comprenda i caratteri.
Questo il codice che ho utilizzato associato all'evento "su uscita":
 
Private Sub txtcasellaricerca_Exit(Cancel As Integer)
Dim boxricerca As String
boxricerca = "SELECT * FROM MiaQuery WHERE Nome LIKE '*" & 
txtcasellaricerca.Text & "*'"
Me.RecordSource = boxricerca
End Sub
 
Così potrebbe anche andare perchè mi permette di digitare tutti i 
caratteri fino a quando non attivo l'evento per esempio con il tasto tab.
 
Se invece associo questo codice all'evento "su tasto su" ad ogni 
carattere inserito il focus si sposta sul primo record trovato e con il 
mouse devo riportare il cursore dentro la casella di ricerca.
In questo caso però la ricerca è, diciamo, "in tempo reale".
 
Non c'è modo di avere il filtro "in tempo reale" man mano che digito i 
caratteri rimanendo nella casella di testo?
 
Grazie a quanti mi potranno dare una mano.
Gianni

 Gianni
 
 
Sì, si può fare.
L'evento da usare è "Su Modifica" (Change)
 
Inoltre devi utilizzare le proprietà SelStart e SelLength per ritrovare 
il cursore alla posizione corretta.
 
Qui spiega tutto:
http://allenbrowne.com/AppFindAsUType.html
 
 
 
Copio-incollo brutalmente un mio codice, devi adattarlo alle tue 
esigenze:
 
Private Sub CasellaRicerca_Change()
 
On Error GoTo Errore
 
    'me!CasellaRicerca.SetFocus 'a volte perde il focus
    Dim MioTesto As String
        MioTesto = Me!CasellaRicerca.Text
 
    Dim InizioSelezione As Long
        InizioSelezione = Me!CasellaRicerca.SelStart
    Dim LunghezzaSelezione As Long
        LunghezzaSelezione = Me!CasellaRicerca.SelLength
 
    If MioTesto = "" Then
        Me!SottomascheraArticoli.Form.FilterOn = False
        Exit Sub
    End If
 
    Dim StringaFiltro As String
    Dim a As Long
 
    'QUI CREI LA TUA STRINGA FILTRO
    StringaFiltro = .....
 
    Me!SottomascheraArticoli.Form.Filter = StringaFiltro
 
    Me!SottomascheraArticoli.Form.FilterOn = True
 
UscitaConSelezione:
    Me!CasellaRicerca.SelStart = InizioSelezione
    Me!CasellaRicerca.SelLength = LunghezzaSelezione
 
Uscita:
    Exit Sub
 
Errore:
    If Err.Number = 2185 Then 'nessun record
        Me!SottomascheraArticoli.Form.FilterOn = False
        Me!CasellaRicerca.SetFocus
        Resume UscitaConSelezione
    Else
        MsgBox Err.Description
        Resume Uscita
    End If
 
End Sub

 > Il 18/12/2020 07:20, Silvio ha scritto:
 
Ti ringrazio per il suggerimento.
Però io speravo ci fosse la possibilità di adattare il codice più 
semplice che avevo trovato per far sì che il cursore rimanesse sempre 
alla fine del testo digitato.
 
Ed ho trovato il sistema con:
 
Me.MIOTESTO.SetFocus
Me.MIOTESTO.SelStart = Len(Me.MIOTESTO)
 
Unico problema a questo punto è che il programma mi restituisce l'errore 
"utilizzo non valido di Null".
Questo accade dopo aver digitato il test (con record filtrati 
correttamente) quando vado indietro con il cursore per cancellare i 
caratteri digitati e togliere il filtro.
 
Ciao
Gianni
 
 
 

 caratteri digitati e togliere il filtro.
 
Risolto: 
www.donkarl.com/it?FAQ4.24