Newsgroup: it.comp.appl.access
Titolo: Come creare un controllo di ricerca

Ciao,
nel sito comune ho trovato Come creare un controllo di ricerca" Purtroppo
dopo aver creato la casella di testo "ricerca" e aver inserito il codice mi
da un errore di compilazione precisamente in
"Private Sub ricerca_KeyPress" e rimane evidenziato "rst.FindNext "
Io ho solamente sostituito diTTA con "IlMioCampo"
Secondo voi cosa non va?

 ha scritto nel messaggio
news:mkYg9.15528$my3.2...@twister2.libero.it...

Non ho mai visto la funzione sul Sito Comune, ma da quello che dici penso
che il problema sia legato al settaggio del recodset tipo:
Dim db as Database
Dim rst As Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset(miaTabella)
ecc...
oppure sul controllo dei record:
hai almeno un record nella tabello o un controllo su ciň che succede quando
ne trova uno o non ne trova
Ciao Valerio.


 No, purtroppo va subito in errore.
Ti invio il codice.
____________
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.
______________

 "*"""
il codice va messo su dopo aggiornamento?


Rispondendo ad entrambi, purtroppo non sono programmatore ma solo dilettante
e uso AC00 AC02 da poco. Sono abbastanza sicuro che non esista più la
sintassi di FindNext e quindi dovete cercarvi nell'help qella di Find.
Ciao Valerio.

 ha scritto nel messaggio
news:am1u71$ma2$1...@lacerta.tiscalinet.it...
[CUT]
Il codice VBA di cui parla Roby è stato scritto per Access 97 e fa quindi
riferimento alle librerie DAO.
Se deve essere usato in Access 2000 o 2002, occorre aggiungere, ai
riferimenti del database, il riferimento alle librerie DAO, avendo cura che
tale riferimento, nella lista dei riferimenti, preceda il riferimento alle
librerie ADO (o, se puoi, elimina questi ultimi riferimenti).
Anche se lo sembra, questa frase non è uno scioglilingua. :-))
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:n_1h9.15634$eG6.3...@twister1.libero.it...

Ho aggiunto le DAO e le ho messe prima delle ADO.
Non funge.
Dove va fatta la dichiarazione "Dim ChiaveRicerca As String"?

 Dove va fatta la dichiarazione "Dim ChiaveRicerca As String"?
Sib nella spiegazione della FAQ dice:
Si noti che "ChiaveRicerca" č una variabile globale del modulo di classe.
Quindi va dichiarata nel modulo di classe della tua maschera, prima delle
altre routine, cosě come č indicato nella FAQ; se la cosa č per te piů
chiara invece di
Dim ChiaveRicerca As String
puoi anche scrivere
Public ChiaveRicerca As String
