CRITERIO QUERY "LIKE *" NON FUNZIONA CON CAMPO VUOTO

di il
3 risposte

CRITERIO QUERY "LIKE *" NON FUNZIONA CON CAMPO VUOTO

Buongiorno a tutti, ho cercato questo argomento in qualche post precedende ma non ho trovato nulla di simile.

Vi spiego. In un database in cui archivio pratiche sto facendo una maschera di ricerca multicampo che aggiorna una sottomaschera appoggiata su una query. All'apertura della maschera principale tutti i campi contengono il carattere asterisco “*”

La query di origine dati della sottomaschera ha nei propri campi come criterio:

Like [campo1] & “*”

in questo modo se nel [campo1] metto anche solo l'inizio della parola mi trova tutti i record corrispondenti.

Il problema è questo, se un record ha [campo1] vuoto, con il criterio LIKE “*” non compare fra i record del raggruppamento e di conseguenza nella sottomaschera.

Ho provato qualche formula ma tutte falliscono miseramente.

Qualcuno ha qualche idea su come aiutarmi? Spero di essermi spiegato bene

3 Risposte

  • Re: CRITERIO QUERY "LIKE *" NON FUNZIONA CON CAMPO VUOTO

    Il Criterio migliore quando non serve è non metterlo… tu invece operi inserendo a prescindere un Criterio.

    Certo è un metodo che se usato correttamente funziona, ma è completamente NON EFFICIENTE, in quanto obbliga sempre ad una MultiElaborazione del singolo Record, rendendo la query più lenta.

    Innanzitutto non è necessario andare ad operare sulla QUery, ma puoi facilmente operare sulla proprietà FILTER di maschera, estremamente più flessibile e comoda.

    in questo caso basta gestire la validazione dei criteri…

    Dim sWHR	As String
    If Len(Me!ComboCriterio1 & vbNullString)>0 Then sWHR=sWHR & "NomeCampo1 = " & Me!ComboCriterio1 & " AND "			' Campo Numerico
    If Len(Me!ComboCriterio2 & vbNullString)>0 Then sWHR=sWHR & "NomeCampo2 = '" & Me!ComboCriterio2 & "' AND "			' Campo Testo
    If Len(Me!ComboCriterio3 & vbNullString)>0 Then sWHR=sWHR & "NomeCampo3 LIKE '*" & Me!ComboCriterio3 & "*' AND "	' Campo Testo ricerca con testo parziale
    If Len(Me!ComboCriterio4 & vbNullString)>0 Then sWHR=sWHR & "NomeCampo4 = " & cLng(Me!ComboCriterio4) & " AND "		' Campo Data
    '.... elenco altri criteri
    If Len(sWHR)>0 then 
    	sWHR=Mid$(sWHR,1,LEN(sWHR)-5) ' Toglie AND finale non necessario
    	Me.Filter=sWHR
    	Me.FilterOn=True
    Else
    	Me.FilterON=False
    End if
  • Re: CRITERIO QUERY "LIKE *" NON FUNZIONA CON CAMPO VUOTO

    Ciao.

    La cosa preoccupante è che su un campo che da quello che dici è indispensabile per i dati archiviati, tu abbia un valore null.
    Quindi il vero problema sta a monte nella progettazione del database e non principalmente nella ricerca.


    Potresti postare i codici di prova che hai usato. Magari hanno fallito per errore di costruzione o di sintassi e quindi forse basta correggere quello che hai già provato.

    Inoltre, la via più veloce per risolvere il problema è quello di evitare di avere valori Null e quindi di trovare una soluzione per immettere dei valori predefiniti quando non immetti dei dati nel campo, in modo che access, al salvataggio del record provveda da solo ad immettere il valore predefinito (tipo Non immesso, non disponibile…)


    Oppure altra soluzione è quella di rendere obbligatoria l'immissione dei campi che di solito sono indispensabili. O tramite l'impostazione da tabella oppure tramite VBA.

    Altra soluzione è quella di cambiare il campo di ricerca, dove sai con certezza che non hai campi Null.

    Quindi, prima ti consiglio di risolvere il problema alla radice, per poi andare a gestire i campi null, nel caso qualcosa andasse storto.

    La gestione dei null non deve essere un modo per risolvere un “bug”, ma un controllo di sicurezza per evitare i “bug”

    EDIT. Vedo che @alex ha già provveduto alle spiegazioni del caso.

  • Re: CRITERIO QUERY "LIKE *" NON FUNZIONA CON CAMPO VUOTO

    20/12/2022 - @Alex ha scritto:


    Il Criterio migliore quando non serve è non metterlo… tu invece operi inserendo a prescindere un Criterio.

    Certo è un metodo che se usato correttamente funziona, ma è completamente NON EFFICIENTE, in quanto obbliga sempre ad una MultiElaborazione del singolo Record, rendendo la query più lenta.

    Innanzitutto non è necessario andare ad operare sulla QUery, ma puoi facilmente operare sulla proprietà FILTER di maschera, estremamente più flessibile e comoda.

    in questo caso basta gestire la validazione dei criteri…

    Dim sWHR	As String
    If Len(Me!ComboCriterio1 & vbNullString)>0 Then sWHR=sWHR & "NomeCampo1 = " & Me!ComboCriterio1 & " AND "			' Campo Numerico
    If Len(Me!ComboCriterio2 & vbNullString)>0 Then sWHR=sWHR & "NomeCampo2 = '" & Me!ComboCriterio1 & "' AND "			' Campo Testo
    If Len(Me!ComboCriterio3 & vbNullString)>0 Then sWHR=sWHR & "NomeCampo3 LIKE '*" & Me!ComboCriterio1 & "*' AND "	' Campo Testo ricerca con testo parziale
    If Len(Me!ComboCriterio4 & vbNullString)>0 Then sWHR=sWHR & "NomeCampo4 = " & cLng(Me!ComboCriterio1) & " AND "		' Campo Data
    '.... elenco altri criteri
    If Len(sWHR)>0 then 
    	sWHR=Mid$(sWHR,1,LEN(sWHR)-5) ' Toglie AND finale non necessario
    	Me.Filter=sWHR
    	Me.FilterOn=True
    Else
    	Me.FilterON=False
    End if

    in effetti non avevo pensato alla possibilità di appliacare un filtro alla maschera. Faccio una prova. Grazie mille

Devi accedere o registrarti per scrivere nel forum
3 risposte