Newsgroup: it.comp.appl.access
Titolo: Ricercare parola in un elenco

riposto semplificando e con qualche idea di base ma non so se è la
strada giusta
Ho un elenco(casella di riepilogo) collegato
ad una query
Devo creare una casella di testo in modo che man mano che digito
le lettere mi sposta la selezione dell'elenco sui nomi che iniziano
appunto per le lettere digitate
Inoltre devo fare in modo di poter trovare la parola anche come testo
contenuto
(cioè non solo a partire dall'inizio del nome)
stavo pensando al limite di fare
1)
prima la ricerca sulla query
che sta dietro all'elenco. si può fare oppure deve per forza la query
avere una maschera e non un elenco,
poi dovrei sapere su quale record ho trovato la parola e poi
2)
passare tale valore a del codice che mi sposta la selezione sull'elenco
se già qualcuno sa impostore la prima parte, un passettino è già fatto
poi credo che per la seconda di farcela (credo)
quindi codice di ricerca come quello di sib ma non su una tabella di una
maschera ma su
una query di un elenco con l'aggiunta di riconoscimento del numero di
record individuato
Questo è il codice di sib ma solo per maschera con tabella
Come creare un controllo di ricerca di Sib
Talvolta si presenta la necessità di avere un semplice controllo per la
ricerca rapida
 in uno specifico campo. Si pensi alla ricerca di un cliente in una
maschera.
Vero è che Access possiede una specifica autocomposizione che crea una
casella
combinata per la ricerca, ma tale casella ha qualche limite, prima di
tutto cerca il
cliente solo dopo l'aggiornamento e cioè quando date invio, e comunque
cerca a
partire dall'inizio del campo, e non per contenuto.
Col mio metodo è sufficiente creare una casella di testo che chiameremo
"Ricerca",
poi sarà sufficiente aggiungere il codice che segue:
Dim ChiaveRicerca As String
Private Sub Ricerca_Change()
   Dim rst As Recordset
   Dim strR As String
   strR = Me.Ricerca.Text
   If Not IsNull(Me!Ricerca.Text) Then
      Set rst = Me.RecordsetClone
      rst.FindFirst "DITTA like """ & ChiaveRicerca & Me!Ricerca.Text &
"*"""
      Me.Bookmark = rst.Bookmark
      rst.Close
      Set rst = Nothing
   End If
   Me!Ricerca = strR
   Me!Ricerca.SelStart = 255 'Len(Me!Ricerca.Text)
End Sub
Private Sub Ricerca_DblClick(Cancel As Integer)
   Select Case Me!Ricerca.SpecialEffect
   Case 1
      Me!Ricerca.SpecialEffect = 2
      ChiaveRicerca = "*"
      Me!Ricerca.ControlTipText = "Ricerca rapida per parte del campo"
   Case 2
      Me!Ricerca.SpecialEffect = 1
      ChiaveRicerca = ""
      Me!Ricerca.ControlTipText = "Ricerca rapida da inizio campo"
   Case Else
      MsgBox "Viene reimpostato l'aspetto della casella", vbExclamation,
"Errore"
      Me!Ricerca.SpecialEffect = 1
      ChiaveRicerca = ""
      Me!Ricerca.ControlTipText = "Ricerca rapida da inizio campo"
   End Select
End Sub
Private Sub Ricerca_KeyPress(KeyAscii As Integer)
   Dim rst As Recordset
   Dim str As String
   If KeyAscii = 13 Then
      If Not IsNull(Me!Ricerca.Text) Then
         Set rst = Me.RecordsetClone
         rst.FindNext "DITTA like """ & ChiaveRicerca & Me!Ricerca.Text
& "*"""
         If rst.NoMatch Then rst.FindFirst "DITTA like """ &
ChiaveRicerca & Me!Ricerca.Text & "*"""
         Me.Bookmark = rst.Bookmark
         rst.Close
         Set rst = Nothing
      End If
      Me!Ricerca.SetFocus
      Me!Ricerca.SelStart = 255
      KeyAscii = 0
   End If
End Sub
Si noti che "ChiaveRicerca" è una variabile globale del modulo di
classe.
Il funzionamento che si ottiene è semplice, basta iniziare a digitare
che il codice troverà
immediatamente il primo record il cui campo "DITTA" (voi userete il
campo che vi interessa)
 inizia per i caratteri che avete digitato. Se non viene trovato nulla
si resta sul primo record.
Per trovare i record successivi al primo è sufficiente premere invio.
Per effettuare una ricerca per "testo contenuto" e non per "Parte
iniziale del campo" basta
 fare doppio click sul controllo, questi assumerà l'aspetto incassato e,
quando inizierete a
digitare, troverà il primo record il cui campo "DITTA" contiene (non
semplicemente inizia)
 il testo digitato. Perche' tutto funzioni in modo corretto, bisogna
impostare il controllo
Ricerca in visualizzazione In Rilievo nella maschera, sara' poi il
codice che si occupera' del resto.


in questo caso puoi usare docmd.findrecord etc.. o con filter
un caso similare l'avevo risolto con l'intercettazione dei tasti
premuti dall'utente, quindi effettuavo la ricerca ed il posizionamento
sulla maschera tramite docmd.findrecord...
per le ricerche di testo all'interno usavo una casella di testo non
collegata ed il settaggio di me.filter sul valore scelto....
se hai tanti record non conviene reimpostare il filtro ad ogni lettera
inserità bensì aspettare una conferma all'inserimento tramite
lostfocus
se hai pochi dati puoi usare solo il secondo metodo per risolvere
entrambi i problemi...
CUT
Saluti.
Emanuele.

 entrambi i problemi...
vedo le caratteristiche di tali proprietą perņ non so se puņ andare
anche perchč ti consente la ricerca solo sulla prima e non per le
successive parole
(credo) e la  ricerca la fa dentro al esto di un record
ad esempio
il cane miagola tutto il giorno
s io digito miag
mi va trovare il primo record che dentro al test ha miag?
comunque dņ un'occhiata a tali proprietą

comunque dò un'occhiata a tali proprietà
questo lo puoi fare con findrecord   e trovasuccessivo se in tempo
reale devi usare per forza i filtri..
Saluti.
Emanuele.