Ricerca o filtro immediato

di il
15 risposte

Ricerca o filtro immediato

Ciao a tutti,
ho una maschera a più elementi, nell'intestazione ho iserito una casella di testo. Ora vorrei che mentre scrivo nella casella di testo i dati sottostanti vengano filtrati, tenendo solo quelli che contengono i dati della casella di testo...
tipo la rubrica di Outlook per intenderci..
dite che si può fare?

15 Risposte

  • Re: Ricerca o filtro immediato

    Certo si può fare.

    Tu cosa hai provato a fare...?
    Che conoscenze di VBA hai...? Perchè questo richiede chiaramente del codice... e se non hai un po di dimestichezza lo vedo poco possibile.

    Vorrei tuttavia farti notare che se abiliti i Pulsanti di spostamento si abilita una TextBox in basso che fa già questa cosa...!
  • Re: Ricerca o filtro immediato

    Per caterebo: Consiglio di modificarla in "casella combinata" e sfruttando la procedura guidata, scegliendo l'opzione "Trova un record nella maschera basato sul valore selezionato nella casella combinata". Fai attenzione però all'eventualità del problema "apostrofo". Ti consiglio di dare un'occhiata completa anche a questo thread
    https://www.iprogrammatori.it/forum-programmazione/access/casella-combinata-non-rispetta-apostrofo-t13263.html?hilit=apostrofo#p8479326

    @Alex ha scritto:


    Vorrei tuttavia farti notare che se abiliti i Pulsanti di spostamento si abilita una TextBox in basso che fa già questa cosa...!
    Vero. Non me ne ero mai accorto...e direi che funziona molto efficacemente.
  • Re: Ricerca o filtro immediato

    La casella che appare infono evidenzia ma in realtà non filtra e la casella combinata non mi piace prorpio, vorrei riuscire a farlo con VBA.
    So utilizzare VBA solo per le cose più semplici ... credo che con una dritta sui codici da utilizzare potrei riuscirci...
  • Re: Ricerca o filtro immediato

    caterebo ha scritto:


    la casella che appare infono evidenzia ma in realtà non filtra e la casella combinata non mi piace prorpio, vorrei riuscire a farlo con VBA.
    So utilizzare VBA solo per le cose più semplici ... credo che con una dritta sui codici da utilizzare potrei riuscirci...
    Guarda non serve la Combo, serve proprio una TextBox...!
    Il codice è semplice ma non banale e non credo sia solo questione di una dritta... ma provo a dartela.

    Insostanza devi ricostruire la concatenazione dei campi con il criterio che è quanto digiti nella TextBox.
    Quindi se la Form ha 3 Campi dovrai ottenere
    
    [Campo1] LIKE '*TestoDigitato*' OR [Campo2] LIKE  '*TestoDigitato*' OR [Campo3] LIKE  '*TestoDigitato*'
    Dopo di che costruita la stringa la applichi alla proprietà FILTER...!

    Come puoi vedere si applica a campi di tipo Testo, quindi dovrai convertire quello NON Testo in Testo nel criterio stesso.

    Ora l'elenco dei campi lo trovi nella Collection FIELDS del Recordset di maschera, quindi fai un ciclo su quello per Ogni FIELD nella collection FIELDS... mentre il FieldType, per capire se devi attuare la conversione o meno, conviene convertire tutti a prescindere...
    Diventerà pertanto una cosa simile:
    
    str([Campo1]) LIKE '*TestoDigitato*' OR str([Campo2]) LIKE  '*TestoDigitato*' OR str([Campo3]) LIKE  '*TestoDigitato*'
    Uso [str] invece di [cStr] per mantenere il carattere di separtazione dei decimali... altrimenti otterresti la Virgola al posto del punto con la conversione...!

    Il tutto se hai capito bene richiede 10 righe di codice non di più.
  • Re: Ricerca o filtro immediato

    GRAZIE GRAZIE GRAZIE
    mi metto all'opera poi ti faccio sapere!!
  • Re: Ricerca o filtro immediato

    @Alex ha scritto:


    caterebo ha scritto:


    la casella che appare infono evidenzia ma in realtà non filtra e la casella combinata non mi piace prorpio, vorrei riuscire a farlo con VBA.
    So utilizzare VBA solo per le cose più semplici ... credo che con una dritta sui codici da utilizzare potrei riuscirci...
    Guarda non serve la Combo, serve proprio una TextBox...!
    Il codice è semplice ma non banale e non credo sia solo questione di una dritta... ma provo a dartela.

    Insostanza devi ricostruire la concatenazione dei campi con il criterio che è quanto digiti nella TextBox.
    Quindi se la Form ha 3 Campi dovrai ottenere
    
    [Campo1] LIKE '*TestoDigitato*' OR [Campo2] LIKE  '*TestoDigitato*' OR [Campo3] LIKE  '*TestoDigitato*'
    Dopo di che costruita la stringa la applichi alla proprietà FILTER...!

    Come puoi vedere si applica a campi di tipo Testo, quindi dovrai convertire quello NON Testo in Testo nel criterio stesso.

    Ora l'elenco dei campi lo trovi nella Collection FIELDS del Recordset di maschera, quindi fai un ciclo su quello per Ogni FIELD nella collection FIELDS... mentre il FieldType, per capire se devi attuare la conversione o meno, conviene convertire tutti a prescindere...
    Diventerà pertanto una cosa simile:
    
    str([Campo1]) LIKE '*TestoDigitato*' OR str([Campo2]) LIKE  '*TestoDigitato*' OR str([Campo3]) LIKE  '*TestoDigitato*'
    Uso [str] invece di [cStr] per mantenere il carattere di separtazione dei decimali... altrimenti otterresti la Virgola al posto del punto con la conversione...!

    Il tutto se hai capito bene richiede 10 righe di codice non di più.
    Ciao,
    ho seguito le tue istruzioni esclusa la conversone in testo perchè ho solo campi di testo
    
    Me.Filter = "[Società] LIKE '*[Testo111]*'" 
    Me.FilterOn = True
    Però in realtà non capisco cosa filtra... cioè se scrivo "ROSSI" non mi appaiono tutte le società che contengono la parola "ROSSI" sembra che consideri ogni singola lettera a se e non il nome intero...
  • Re: Ricerca o filtro immediato

    caterebo ha scritto:


    ...
    ho seguito le tue istruzioni esclusa la conversone in testo perchè ho solo campi di testo
    
    Me.Filter = "[Società] LIKE '*[Testo111]*'" 
    Me.FilterOn = True
    Però in realtà non capisco cosa filtra... cioè se scrivo "ROSSI" non mi appaiono tutte le società che contengono la parola "ROSSI" sembra che consideri ogni singola lettera a se e non il nome intero...
    Gli utenti dei forum in lingua inglese scrivono PFMJI, per dire "scusate l'intrusione".
    Spero che il codice che hai riportato non sia proprio quello che hai scritto perché non "funzionerebbe mai". Nel filtro devi mettere il valore contenuto nel controllo [Testo111], non la parola [Testo111]. Considerando poi che è all'interno di parentesi quadrate e ci sono gli asterischi è facile che lo interpreti come "elenco di caratteri da cercare", del tipo trova tutte le Società che contengono t, e, s, o, 1 e/o relative combinazioni.
    Me.Filter = "[Società] LIKE '*" & [Testo111] & "*'" 
    Occhio alla gestione degli apostrofi
  • Re: Ricerca o filtro immediato

    Finalmente riesco a ripondere, avevo problemi con il sito.
    Ad ogni modo sono riuscita ad impostare la ricerca su tutti i campi che mi interessavano.
    Ho un' altra domanda in merito, esiste un carattere jolly da utilizzare nella casella di testo per considerare due parole separate e non continuative?
    tipo NOME e CANTIERE?
  • Re: Ricerca o filtro immediato

    No, non esiste nulla di AUTOMATICO... ma nulla vieta che sia tu a definirlo...!
    Io in una mia realizzazione ho utilizzato il [;] come separatore ed ho fatto un ciclo di questo tipo, semplificando...
    
    Dim varItems As Variant
    Dim varItem As Variant
    Dim strWH As Sring
    If Instr(Me!NomeTextBoxCriterio,";")=0 Then Exit Function
    varItems=Split(Me!NomeTextBoxCriterio,";")
    strWH=vbNullstring 
    For each varItem in VarItems
       strWH=strWH & "[Campo1] LIKE '*" & VarItem & "*' OR "
       strWH=strWH & "[Campo2] LIKE '*" & VarItem & "*' OR "
       strWH=strWH & "[Campo3] LIKE '*" & VarItem & "*' OR "
    Next
    If Len(strWH)>0 Then
       Me.Filter=strWH
       Me.FilterON=True
    End If
    ....
  • Re: Ricerca o filtro immediato

    Devo studiarmela....
    attualmente sono arrivata qui:
    If Me.Testo326 = Null Then
    Me.FilterOn = False
    End If


    Me.Filter = "[Cliente] LIKE '*" & [Testo326] & "*'Or[Cantiere] LIKE '*" & [Testo326] & "*'Or[Lavoro] LIKE '*" & [Testo326] & "*'Or[Stato commessa] LIKE '*" & [Testo326] & "*'Or[Commessa] LIKE '*" & [Testo326] & "*'Or[Data] LIKE '*" & [Testo326] & "*'"
    Me.FilterOn = True


    Ora provo ad aggiungere parte del tuo codice
  • Re: Ricerca o filtro immediato

    Attenzione che devi indirizzare il codice a seconda sia presente o meno il SEPARATORE... cerca di capirlo prima di fare varianti...
  • Re: Ricerca o filtro immediato

    @Alex ha scritto:


    No, non esiste nulla di AUTOMATICO... ma nulla vieta che sia tu a definirlo...!
    Io in una mia realizzazione ho utilizzato il [;] come separatore ed ho fatto un ciclo di questo tipo, semplificando...
    
    Dim varItems As Variant
    Dim varItem As Variant
    Dim strWH As Sring
    If Instr(Me!NomeTextBoxCriterio,";")=0 Then Exit Function
    varItems=Split(Me!NomeTextBoxCriterio,";")
    strWH=vbNullstring 
    For each varItem in VarItems
       strWH=strWH & "[Campo1] LIKE '*" & VarItem & "*' OR "
       strWH=strWH & "[Campo2] LIKE '*" & VarItem & "*' OR "
       strWH=strWH & "[Campo3] LIKE '*" & VarItem & "*' OR "
    Next
    If Len(strWH)>0 Then
       Me.Filter=strWH
       Me.FilterON=True
    End If
    ....
    Ho provato ad utilizzare il tuo codice ma ho questo errore
    "Errore di compilazione: Tipo definito dall'utente non definito" segnalato su
    strWH As Sring
  • Re: Ricerca o filtro immediato

    Lo riesci ad intuire che il problema NON è il mio codice...?
    Hai dei riferimenti nel tuo progetto che mancano e mandano in conflitto le LIB.
  • Re: Ricerca o filtro immediato

    No sinceramente non capisco che cosa vuole che definisca...
Devi accedere o registrarti per scrivere nel forum
15 risposte