Funzione Like.

di il
11 risposte

Funzione Like.

Buonasera, premetto che non sono esperto in Access e sto cercando di imparare.

Sicuramente l'argomento sarà stato trattato tante volte ma, chiedo perdono, non ho capito cosa fare dopo aver letto qualche post in qualche maniera “simili”.

Il problema è questo:
Ho una maschera con vari campi che, nell'insieme, compongono delle ricerche in una sottomaschera proveniente da una query.
Ad es. ho una maschera di ricerca “Clienti”;
nella sottomaschera ho vari campi che possono essere; Denominazione Cliente, indirizzo, numero telefono,  ecc..
se ho una maschera vari campi ricerca - nella query della sottomaschera (ad es. nel campo “INDIRIZZO_MAIL”) inserisco un Like in questo modo:

Like "*" & [forms]![Mia_Maschera]![INDIRIZZO_MAIL]) & “*”

ma se un campo “INDIRIZZO_MAIL” della query è vuoto (magari avrò un cliente di cui non ho l'indirizzo mail) il relativo record non compare nella sottomaschera.

Sicuramente sbaglio il testo della funzione Like ma non riesco a capire dove.
In Rete ho trovato soluzioni del tipo, inserire la funzione NZ ed ho provato in questo modo:

Like "*" & NZ([forms]![Mia_Maschera]![INDIRIZZO_MAIL]) & “*”)

ma non funziona.

Qualcuno può darmi istruzioni in merito?
Ringrazio in anticipo.

Lino

11 Risposte

  • Re: Funzione Like.

    Dipende da dove scrivi la WHERE… se la scrivi da QBE(editor delle query) o direttamente in SQL.

    IN entrambi i casi serve l'apicetto, sintassi chiamata dalle stringhe.

    [NomeCampo] Like "'*" & NZ([forms]![Mia_Maschera]![INDIRIZZO_MAIL]) & "*'" )
  • Re: Funzione Like.

    Buongiorno e grazie per la risposta.

    Ho provato quanto mi hai scritto (io non lo scrivo in SQL ma nella riga CRITERI della struttura Query) e purtroppo non funziona.
    Scrivendo il tuo codice mi spariscono tutte i record della query, oltretutto, mi esce il messaggio che il numero di parentesi sono troppe.
    Poi, una domanda, [NomeCampo] questo sarebbe il nome campo della maschera o quello della query? Comunque non funzionano.

    Ho fatto varie prove scrivendo:

    Like "'*" & Nz([forms]![Msk_Soggetti_Ricerca]![indirizzo] & "*'") (non compaiono i record della query)
    Like "*" & Nz([forms]![Msk_Soggetti_Ricerca]![indirizzo] & "*") (compaiono i record della query, ma non quelli senza indirizzo)
    [nomeCampo_Maschera] Like "'*" & Nz([forms]![Msk_Soggetti_Ricerca]![indirizzo] & "*'") (non compaiono i record della query)[nomeCampo_query] Like "'*" & Nz([forms]![Msk_Soggetti_Ricerca]![indirizzo] & "*'") (non compaiono i record della query)

    Non so che fare e cosa sbaglio.

  • Re: Funzione Like.

    Se scrivi da QBE termo che dovrai scrivere i riferimenti agli Oggetti con il Generatore di Espressioni che userà Maschera e non Forms…!

    Se metti a disposizione il DB con un FileSharing vediamo nello specifico di capire.

  • Re: Funzione Like.

    Va bene, preparo una specie di demo e lo invio.

    Grazie per la pazienza.

  • Re: Funzione Like.

    Buongiorno, ho preparato il file.

    L'ho caricato su Hotmail.

    https://1drv.ms/u/s!Apf6wOph_GmM6Hj_Ah-u33eA4dgv?e=rPEYg7

    Spero che la condivisione funzioni.

    Buona giornata

  • Re: Funzione Like.

    Se non dici cosa devo guardare perdiamo tempo…!

  • Re: Funzione Like.

    Quando si apre il file, si apre una maschera popup. E' scritto tutto lì.

  • Re: Funzione Like.

    Il Record che viene eliminato o meglio NON INCLUSO è quello con Campo  [Contat_Soggett]=10, ed il motivo è ovvio… il campo INDIRIZZO non è valorizzato, ovvero è NULL, di conseguenza il criterio che hai inserito lo esclude in quanto il JOLLY [*] che usi opera su Stringhe e NULL non rientra.

    Ti basta mettere un carattere qualsiasi nel campo dalla tabella e riaprire per verificare la cosa.

    Se poi vorrai che possa funzionare allora serve fare il CASTING del FieldType nella query forzandolo a Stringa e da NULL diverrà NULLSTRING, basterà concatenare il campo con un “”

    Intanto ho semplificato la Query [Qry_Soggetti_Ricerca] così:

    SELECT Tbl_Soggetti.*
    FROM Tbl_Soggetti
    WHERE ((Tbl_Soggetti.Rag_Soc_Soggetti) Like "*" & [forms]![Msk_Soggetti_Ricerca]![Rag_Sociale] & "*") AND 
    	  ((Tbl_Soggetti.Indirizzo_Soggetti) Like "*" & [forms]![Msk_Soggetti_Ricerca]![indirizzo] & "*")
    ORDER BY Tbl_Soggetti.Rag_Soc_Soggetti;

    Se poi dovrai accettare anche i campi NULL servirà fare la modifica:

    WHERE ((Tbl_Soggetti.Rag_Soc_Soggetti + '') Like "*" & [forms]![Msk_Soggetti_Ricerca]![Rag_Sociale] & "*") AND 
    	  ((Tbl_Soggetti.Indirizzo_Soggetti + '') Like "*" & [forms]![Msk_Soggetti_Ricerca]![indirizzo] & "*")
  • Re: Funzione Like.

    Ho risolto (dietro aiuto del canale YouTube: Access Facile) in questa maniera.

    Like "*" & [Forms]![Msk_Soggetti_Ricerca]![Indirizzo] & "*" Or Is Null

    cosa è cambiato? Questo - Or Is Null

    E funziona perfettamente

    P.S. un altro motivo per cui non funzionava è che in quel campo non avevo inserito il Requery necessario.

    Ti ringrazio tanto per il tempo che mi hai dedicato e, comunque, voglio provare ad usare la tua soluzione (e, soprattutto, la voglio capire).
    Grazie grazie grazie.

  • Re: Funzione Like.

    Tecnicamente fanno la stessa cosa, nel senso che accetta anche Null, tuttavia è una condizione aggiuntiva rispetto al Casting, andrebbe analizzara con i piani di esecuzione delle Queries, ma credo possa richiedere un confronto aggiuntivo per ogni record.

  • Re: Funzione Like.

    Il tuo linguaggio è troppo “tecnico” per me.

    Sicuramente vuoi spiegarmi ma io non ho la tua preparazione tecnica che invidio.
    Nei prossimi giorni di “ponte” cercherò di capire quanto mi hai scritto perchè il lavoro “normale” mi prende parecchio ed aspetto i giorni di festa per dedicarmi un pò.
    Grazie, sempre.

Devi accedere o registrarti per scrivere nel forum
11 risposte