Discussione:
Trovare Record tramite Macro (grazie Alkatraz)
(troppo vecchio per rispondere)
Luigi Napolitano
2005-10-11 11:59:59 UTC
Permalink
Salve,

ho il seguente problema: in una maschera di Access, è presente una TextBox
(in cui inserisco qualcosa da ricercare) ed un Pulsante (per avviare la
ricerca). Il Pulsante richiama il codice per effettuare la ricerca di record
(findrecord e findnext).
Vorrei quindi effettuare una ricerca che mi visualizza sia il primo record,
che TUTTI i successivi.

Questo di seguito è il codice da "Alkatraz" il 19 Aprile 2003...
--------------------------------------------------------
Public Function cercainform(mytxtctl As TextBox)
If miavar = 0 Then
GoTo trovarecord
Else
GoTo trovasuccessivo
End If
trovarecord:
If IsNull(mytxtctl.Value) Then
MsgBox "Immettere un criterio di ricerca", vbExclamation
Exit Function
End If
stringa = mytxtctl.Value
mytxtctl.Value = Nothing
DoCmd.FindRecord stringa, acAnywhere, False, acSearchAll, True, acAll,
True
mytxtctl.Value = stringa
miavar = miavar + 1
Exit Function
trovasuccessivo:
stringa = mytxtctl.Value
mytxtctl.Value = Nothing
For i = 1 To 2
DoCmd.FindNext
Next
mytxtctl.Value = stringa
Exit Function
End Function
------------------------------------------------------
Private Sub MiaCaselladiTesto_Change()
miavar = 0
End Sub

Private Sub MioPulsanteTrova_Click()
Call cercainform(MiaCaselladiTesto)
End Sub

Private Sub Form_Close()
miavar = 0
End Sub
--------------------------------------------------------
Tale codice funziona abbastanza bene. Infatti, trova il primo record ed
anche i successivi, ma non tutti.
Qualcuno di voi (o lo stesso Alkatraz che ringrazio) potrebbe dirmi cosa
fare per far trovare TUTTI i record?
Grazie sin d'ora a tutti coloro che vorranno aiutarmi.
Luigi Napolitano
Sergio MAZZA
2005-10-11 12:31:46 UTC
Permalink
Post by Luigi Napolitano
Salve,
ho il seguente problema: in una maschera di Access, è presente una TextBox (in cui inserisco qualcosa da ricercare) ed un Pulsante
(per avviare la ricerca). Il Pulsante richiama il codice per effettuare la ricerca di record (findrecord e findnext).
Vorrei quindi effettuare una ricerca che mi visualizza sia il primo record, che TUTTI i successivi.
--- omissis ---
Post by Luigi Napolitano
Tale codice funziona abbastanza bene. Infatti, trova il primo record ed anche i successivi, ma non tutti.
Qualcuno di voi (o lo stesso Alkatraz che ringrazio) potrebbe dirmi cosa fare per far trovare TUTTI i record?
Grazie sin d'ora a tutti coloro che vorranno aiutarmi.
Luigi Napolitano
Se devi visualizzare il risultato di una ricerca, fai prima ad filtrare la maschera in base al contenuto della casella di testo...

Ciao.
--
Sergio MAZZA
Luigi Napolitano
2005-10-11 13:04:15 UTC
Permalink
Post by Sergio MAZZA
Se devi visualizzare il risultato di una ricerca, fai prima ad filtrare la
maschera in base al contenuto della casella di testo...
Esatto...
Vorrei però che la ricerca di Access (Menu Modifica -> Trova, Trova
Successivo) avvenga tramite una macro associata al pulsante "Trova" (senza
utilizzare il filtro).

Il codice che ho riportato nel messaggio precedente *a volte* non trova
TUTTI i record aventi la stringa da ricercare.
Forse c'è da correggere qualcosa.
E' possibile?

Grazie per avermi risposto,
Luigi
Sergio MAZZA
2005-10-11 13:48:14 UTC
Permalink
Post by Luigi Napolitano
Esatto...
Vorrei però che la ricerca di Access (Menu Modifica -> Trova, Trova
Successivo) avvenga tramite una macro associata al pulsante "Trova" (senza utilizzare il filtro).
Il codice che ho riportato nel messaggio precedente *a volte* non trova TUTTI i record aventi la stringa da ricercare.
Forse c'è da correggere qualcosa.
E' possibile?
Grazie per avermi risposto,
Luigi
"Esatto" ma tu vuoi lo stesso utilizzare il trova, quindi non è esatto.
Mi sembra molto strano che il trova non trova tutto o a singhiozzo.

Comunque, prova a creare un bottone e nell'evento "su clic" inserisci:
'---
Screen.PreviousControl.SetFocus
DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70
'---

Questo richiama il "trova" del menù; se va bene...

Ciao.
--
Sergio MAZZA
Luigi Napolitano
2005-10-11 15:39:43 UTC
Permalink
Post by Sergio MAZZA
"Esatto" ma tu vuoi lo stesso utilizzare il trova, quindi non è esatto.
Mi sembra molto strano che il trova non trova tutto o a singhiozzo.
Ti posso garantire che invece quel codice funziona a singhiozzo.
Provare per credere...
Post by Sergio MAZZA
'---
Screen.PreviousControl.SetFocus
DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70
'---
Questo richiama il "trova" del menù; se va bene...
Sì, lo ho già provato...
Ma io vorrei eseguire una ricerca senza richiamare il menù, così come fa
quel codice...
Peccato però che funzioni a singhiozzo!

Ad esempio... mettendo 3 al posto di 2 qui...
For i = 1 To 2
DoCmd.FindNext
Next
... vengono trovate più occorrenze, ma non tutte. Alcune che prima venivano
trovate, non vengono restituite più...

Altre idee?
Grazie ancora.
Luigi
Sergio MAZZA
2005-10-11 16:14:18 UTC
Permalink
Post by Luigi Napolitano
Ti posso garantire che invece quel codice funziona a singhiozzo.
Provare per credere...
Mi dispiace ma resto sempre perplesso;
Post by Luigi Napolitano
Sì, lo ho già provato...
Ma io vorrei eseguire una ricerca senza richiamare il menù, così come fa quel codice...
Peccato però che funzioni a singhiozzo!
Ad esempio... mettendo 3 al posto di 2 qui...
For i = 1 To 2
DoCmd.FindNext
Next
... vengono trovate più occorrenze, ma non tutte. Alcune che prima venivano trovate, non vengono restituite più...
Altre idee?
Grazie ancora.
Luigi
Altre idee???
Secondo me dovresti prima chiarirtele bene tu su cosa vuoi fare perché riprendendo quello che altri hanno già affermato: non ha
senso quello che chiedi.
Quindi:
La ricerca di un valore all'interno di una tabella ha come risultato un record.
La selezione, invece, può ritornare zero, uno o più record.

Ora:
Se vuoi cercare in una maschera un record e avere la possibilità di proseguire la ricerca per i restanti record puoi provare ad
utilizzare questo codice:

If Me!xgiaTrovato = True Then
Me.RecordsetClone.FindNext "[nomeCampo] like " & Chr(34) & "*" & Me!ricerca & "*" & Chr(34)
Else
Me.RecordsetClone.FindFirst "[nomeCampo] like " & Chr(34) & "*" & Me!ricerca & "*" & Chr(34)
End If

If Me.RecordsetClone.NoMatch Then
MsgBox Me!ricerca & ", non trovato!"
Me!xgiaTrovato = False
Else
Me!xgiaTrovato = True
DoCmd.GoToRecord acDataForm, Me.Name, acGoTo, Me.RecordsetClone.AbsolutePosition + 1
End If

- "xgiaTrovato" è una casella di controllo con valore predefinito 0 (false);
- "ricerca" è la casella di testo che utilizzi per la ricerca;
- "nomeCampo" è il campo dove fare la ricerca.

Lo inserisci nell'evento "su clic" di un bottone...

Ciao.
--
Sergio MAZZA
Luigi Napolitano
2005-10-11 21:39:26 UTC
Permalink
Post by Sergio MAZZA
Se vuoi cercare in una maschera un record e avere la possibilità di
proseguire la ricerca per i restanti record puoi provare ad > utilizzare
Lo inserisci nell'evento "su clic" di un bottone...
Esatto! Proprio questo desideravo!
Funziona perfettamente.
Grazie per la disponibilità e per l'aiuto.

Ciao,
Luigi

Loading...