Newsgroup: it.comp.appl.access
Titolo: filtro non funzionante su campi NULL

ho una piccola query che filtra i record da mostrare in una listbox
 
SELECT 
Rechnung, Auftrag, Ihr_Auftrag, Gerät, Hersteller, Modell, Seriennummer
FROM Reparaturen
WHERE (((Rechnung) Like [Forms]![RepList]![RechnungList] & "*") 
AND ((Gerät) Like [Forms]![RepList]![GeraetList] & "*") 
AND ((Hersteller) Like [Forms]![RepList]![HerstList] & "*") 
AND ((Modell) Like [Forms]![RepList]![ModellList] & "*") 
AND ((Seriennummer) Like [Forms]![RepList]![SeriennummerList] & "*"));
 
 
Mi sono accorto che i record con il campo Modell vuoto (ma non solo quello, 
anche gli altri campi) NON vengono mostrati, nonostante il filtro
 
(Modell) Like [Forms]![RepList]![ModellList] & "*"
 
che funziona regolarmente per tutti gli altri record; se per esempio metto 
"pippo" nel campo ottengo sia pippo che pippone, che pippolotto
 
mi è venuto il sospetto che il campo non fosse vuoto ma NULL e che questo 
influisse sulla query: ho provato a scriverci dentro qualche carattere ed 
ecco che il record è immediatamente comparso sulla lista; come lo ho 
svuotato, il record é sparito
 
come posso modificare la condizione WHERE per fargli digerire anche queste 
anomalie? 
 
 
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

 
 
nota bene: posso scrivere una query che mi vada a riempire i circa 430 
record anomali con un bel "Missing!" ma resta la voglia di sapere come 
gestire la cosa nel caso i dati non fossero più modificabili


 
 
ci sono suggerimenti sul web, ovviamente, p.e.
 
https://www.techonthenet.com/access/queries/include_nulls.php
 
 
ma l'esempio riportato non mi serve in quanto me li includerebbe se non 
mettessi un filtro ma anche se lo mettessi
 
anche qui provano a trovare una soluzione, senza riuscirsci
 
https://stackoverflow.com/questions/50117318/like-does-not-capture-is-null-
 
values



in sql server basta mettere isnull(tuocampo,'') nella where per 
risolvere il problema
 
 
BFS

 
 
infatti, ma per qualche motivo il SQL di access non me lo prende
 
SELECT *
FROM Reparaturen
WHERE (
(Isnull(Rechnung); '') Like [Forms]![RepList]![RechnungList] & "*") AND 
(Isnull((Gerät); '') Like [Forms]![RepList]![GeraetList] & "*") AND 
(Isnull((Hersteller); '') Like [Forms]![RepList]![HerstList] & "*") AND 
(Isnull((Modell); '') Like [Forms]![RepList]![ModellList] & "*") AND 
(Isnull((Seriennummer); '') Like [Forms]![RepList]![SeriennummerList] & 
"*")
;
 
 
ho provato tutte le combinazioni:
Isnull((Reparaturen.Modell), '')
Isnull((Reparaturen.Modell), "")
Isnull((Reparaturen.Modell); '')
Isnull((Reparaturen.Modell); "")
 
 
se uso la virgola con '' dice syntax error (comma)
se uso ; con '' esce un generico syntax error
come pure se metto ; e ""
 
ho provato anche amenità come queste, con varianti legate a ,/; all'uso di 
parentesi, all'uso di apici e/o doppi apici
 
WHERE 
case
when Isnull(Rechnung)     then "" else Rechnung     end Like 
[Forms]![RepList]![RechnungList]     & "*" AND 
when Isnull(Gerät)        then "" else Gerät        end Like 
[Forms]![RepList]![GeraetList]       & "*" AND 
when Isnull(Hersteller)   then "" else Hersteller   end Like 
[Forms]![RepList]![HerstList]        & "*" AND 
when Isnull(Modell)       then "" else Modell       end Like 
[Forms]![RepList]![ModellList]       & "*" AND 
when Isnull(Seriennummer) then "" else Seriennummer end Like 
[Forms]![RepList]![SeriennummerList] & "*"
;
 
 
WHERE 
Isnull(Rechnung; ""; Rechnung) Like ([Forms]![RepList]![RechnungList]    ) 
& "*" AND 
Isnull(Gerät; ""; Gerät) Like ([Forms]![RepList]![GeraetList]      ) & "*" 
AND 
Isnull(Hersteller; ""; Hersteller) Like ([Forms]![RepList]![HerstList]       
) & "*" AND 
Isnull(Modell; ""; Modell) Like ([Forms]![RepList]![ModellList]      ) & 
"*" AND 
Isnull(Seriennummer; ""; Seriennummer) Like 
([Forms]![RepList]![SeriennummerList]) & "*"
;
 
 
ho collezionato una serie di errori vari:
 
syntax error (missing operator)
wrong number of operators
syntax error [questo non manca mai]
 
credo che alla fine maderò a cagare access e farò una bella query di 
aggiornamento che mi mette un chiaro ed evidente "n/d" nei campi che 
arrivano NULL :/
 
ma non demordo, è venerdì, le cose prima o poi saltano fuori


 
 
mo' mi studio questa pagina:
 
<
https://www.techrepublic.com/article/learn-the-differences-between-is-
 
null-and-isnull-in-access/>


 
 
eccola: e dai e dai alla fine ci sono arrivato :
 
WHERE (((Reparaturen.Rechnung) Like [Forms]![RepList]![RechnungList] & "*") 
AND ((Reparaturen.Gerät) Like [Forms]![RepList]![GeraetList] & "*") AND 
((Reparaturen.Hersteller) Like [Forms]![RepList]![HerstList] & "*") AND 
 
(IIf([Modell] Is Null,"",[Modell]) Like [Forms]![RepList]![ModellList] & 
"*") 
 
AND ((Reparaturen.Seriennummer) Like [Forms]![RepList]![SeriennummerList] & 
"*"));
 
e adesso la applico anche per gli altri campi e vediamo che effetto che fa


nella prima query che hai messo manca una parentesi
SELECT *
FROM Reparaturen
WHERE (
(Isnull(Rechnung); '') Like [Forms]![RepList]![RechnungList] & "*") AND
(Isnull((Gerät); '') Like [Forms]![RepList]![GeraetList] & "*") AND
(Isnull((Hersteller); '') Like [Forms]![RepList]![HerstList] & "*") AND
(Isnull((Modell); '') Like [Forms]![RepList]![ModellList] & "*") AND
(Isnull((Seriennummer); '') Like [Forms]![RepList]![SeriennummerList] &
 
 
Isnull((Rechnung); '')
 
se aggiungi la parentesi e sostituisci il ; con , dovrebbe andare bene così