Filtra record con ricerca parziale

di il
3 risposte

Filtra record con ricerca parziale

Buona sera a tutti gli esperti. Volevo porvi un quesito, immagino, facile facile per voi, ma non per me ovviamente.
In una maschera ho una casella di testo che all'evento AfterUpdate mi applica un filtro per mostrarmi i Records uguali o simili a ciò che ho scritto nella casella. Qui di seguito vi posto il codice.
Così com'è scritto, il codice mi effettua una ricerca ESATTA prima della parola cercata e PARZIALE dopo (Esempio: se volessi cercare tutti quelli con il cognome "ROSSI", il codice mi cerca "ROSSI, ROSSINI, ROSSETTI, ecc... Escludendomi eventuali MOROSSINI, BAROSSETTI, ecc...), e fin qui va tutto bene.
Il mio problema è che tra i vari campi di ricerca ho anche numeri di telefono e dunque vorrei far in modo che i campi [UTENZA 1] e [UTENZA 2] diano l'opportunità di effettuare la ricerca parziale sia PRIMA che DOPO il numero ricercato.
Tenete presente che nel codice ho definito una variabile "i as integer" perché questo è solo una parte di codice.

Grazie per l'interessamento.
Private Sub search_box_AfterUpdate()
'CASELLA DI TESTO CERCA

Dim s As String, i As Integer
    DoCmd.Echo False
    FilterOn = False
    s = "[QUALIFICA] Like %1 Or [COGNOME] Like %1 Or [NOME] Like %1 Or [UTENZA 1] Like %1 " & _
        "Or [UTENZA 2] Like %1 Or [Nr INTERNO] Like %1"
    Filter = Replace(s, "%1", Chr(34) & search_box & "*" & Chr(34))
    FilterOn = True
   End sub

3 Risposte

  • Re: Filtra record con ricerca parziale

    Francamente: capito niente.
    Cosa c'entrano i numeri di telefono?
  • Re: Filtra record con ricerca parziale

    Scusate se faccio la domanda e poi do subito una risposta da solo.
    Ho fatto un tentativo in questo modo:
    Private Sub search_box_AfterUpdate()
    'CASELLA DI TESTO CERCA
    
    Dim s As String, b As String, c As String, d As String, e As String, i As Integer
        DoCmd.Echo False
        FilterOn = False
        s = "[QUALIFICA] Like %1 Or [COGNOME] Like %1 Or [NOME] Like %1 Or [Nr INTERNO] Like %1"
        b = "Or [UTENZA 1] Like %1 Or [UTENZA 2] Like %1"
        c = Replace(s, "%1", Chr(34) & search_box & "*" & Chr(34))
        d = Replace(b, "%1", Chr(34) & "*" & search_box & "*" & Chr(34))
        e = c & d
        Filter = e
        FilterOn = True
        DoCmd.Echo True
        End Sub
    In effetti funziona. Se notate ho definito altre variabili, in modo da fare un passaggio in più.
    A questo punto, vorrei sapere da qualcuno se così è un buon rimedio o magari è un po', diciamo, "ruvido". Magari c'è qualcosa di più elastico per effettuare un tipo di ricerca che si addice al mio caso?
  • Re: Filtra record con ricerca parziale

    Buona sera gibra.

    Faccio un esempio pratico così mi spiego meglio.
    Ho un elenco di nominativi suddivisi in QUALIFICA, COGNOME, NOME, UTENZA 1, UTENZA 2, NR INTERNO.
    Attraverso la casella di testo, dopo l'evento aggiornamento, mi vengono filtrate e quindi visualizzati tutti coloro che hanno nel loro COGNOME o NOME le lettere contenute nella casella di testo.
    Però vorrei che ci sia l'opportunità di filtrare anche con i numeri di telefono, ma la ricerca deve essere parziale sia prima che dopo il numero. Quindi se in elenco c'è un numero di telefono tipo: 123456789, vorrei trovarlo scrivendo nella casella di testo anche solo i numeri 4567.
Devi accedere o registrarti per scrivere nel forum
3 risposte