Newsgroup: it.comp.appl.access
Titolo: Query su campi null multipli

Ciao,
ho visto l'esempio sul sito comune, ma siccome sono un po' duro, non riesco
a capire come fare per impostare la query quando i campi nulli da verificare
in tabella possono essere piu' di uno...
Vanno riportati i parametri su tutte le riche OR !?
Thanks
Fabi

"Fabietto" <fab...@NOSPAMsupereva.it> ha scritto nel messaggio
news:TtBF7.14759$zl4.4...@news2.tin.it...

Prova questa soluzione; l'esempio č fatto selezionando su due campi di tipo
testo, non č perņ complesso aumentare il numero dei campi.
Se la tua tabella si chiama Tabella1 uno ed ha una struttura simile:
ID             Contatore e chiave primaria
Campo1    Testo
Campo2    Testo
ecc. ecc.
prova con una query che ha il seguente codice SQL:
SELECT Tabella1.*
FROM Tabella1
WHERE (((Tabella1.Campo1) Like [Digita primo parametro di ricerca:] & "*" Or
(Tabella1.Campo1) Is Null) AND ((Tabella1.Campo2) Like [Digita secondo
parametro di ricerca:] & "*" Or (Tabella1.Campo2) Is Null));
Nelle finestre per la digitazione dei parametri di ricerca puoi anche
digitare una stringa che contenga solo la parte iniziale del dato da
selezionare (ossia: Ros invece di Rossi).
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

Interessante...mo provo...
...ero arrivato con la mia query sia a finire la colonne disponibili che le
righe !!! =:-0
:-)

Ciao, ho provato con:
SELECT tblnotebook.idnotebook, tblnotebook.notebook, tblclienti.cliente,
tblrma.nrma, tblrma.serialn, tblrma.ngaranzia, tblrma.dataarrivo,
tblrma.datauscita, tblrma.idrma
FROM tblnotebook INNER JOIN (tblclienti INNER JOIN tblrma ON
tblclienti.idcliente = tblrma.idcliente) ON tblnotebook.idnotebook =
tblrma.idnotebook
WHERE (((tblrma.nrma) Like [forms].[frmCerca].[nrma] Or (tblrma.nrma) Is
Null) AND ((tblrma.serialn) Like [forms].[frmCerca].[txtNSeriale] Or
(tblrma.serialn) Is Null) AND ((tblrma.ngaranzia) Like
[forms].[frmCerca].[txtNGaranzia] Or (tblrma.ngaranzia) Is Null));
al posto di :
SELECT tblnotebook.idnotebook, tblnotebook.notebook, tblclienti.cliente,
tblrma.nrma, [forms].[frmCerca].[nrma] AS RMA, tblrma.serialn,
[forms].[frmCerca].[txtNSeriale] AS Ser, tblrma.ngaranzia,
[forms].[frmCerca].[txtNGaranzia] AS GAR, tblrma.dataarrivo,
tblrma.datauscita, tblrma.idrma
FROM tblnotebook INNER JOIN (tblclienti INNER JOIN tblrma ON
tblclienti.idcliente = tblrma.idcliente) ON tblnotebook.idnotebook =
tblrma.idnotebook
WHERE (((tblnotebook.idnotebook) Like [forms].[frmCerca].[cmbNotebook]) AND
((tblclienti.cliente) Like [forms].[frmCerca].[txtCliente]) AND
((tblrma.nrma) Like [forms].[frmCerca].[nrma]) AND (Not
([forms].[frmCerca].[nrma]) Is Null) AND ((tblrma.serialn) Like
[forms].[frmCerca].[txtNSeriale]) AND (Not
([forms].[frmCerca].[txtNSeriale]) Is Null) AND ((tblrma.ngaranzia) Like
[forms].[frmCerca].[txtNGaranzia]) AND (Not
([forms].[frmCerca].[txtNGaranzia]) Is Null)) OR (((tblnotebook.idnotebook)
Like [forms].[frmCerca].[cmbNotebook]) AND ((tblclienti.cliente) Like
[forms].[frmCerca].[txtCliente]) AND (([forms].[frmCerca].[nrma]) Is Null)
AND ((tblrma.serialn) Like [forms].[frmCerca].[txtNSeriale]) AND (Not
([forms].[frmCerca].[txtNSeriale]) Is Null) AND ((tblrma.ngaranzia) Like
[forms].[frmCerca].[txtNGaranzia]) AND (Not
([forms].[frmCerca].[txtNGaranzia]) Is Null)) OR (((tblnotebook.idnotebook)
Like [forms].[frmCerca].[cmbNotebook]) AND ((tblclienti.cliente) Like [forms
].[frmCerca].[txtCliente]) AND ((tblrma.nrma) Like
[forms].[frmCerca].[nrma]) AND (Not ([forms].[frmCerca].[nrma]) Is Null) AND
(([forms].[frmCerca].[txtNSeriale]) Is Null) AND ((tblrma.ngaranzia) Like
[forms].[frmCerca].[txtNGaranzia]) AND (Not
([forms].[frmCerca].[txtNGaranzia]) Is Null)) OR (((tblnotebook.idnotebook)
Like [forms].[frmCerca].[cmbNotebook]) AND ((tblclienti.cliente) Like
[forms].[frmCerca].[txtCliente]) AND (([forms].[frmCerca].[nrma]) Is Null)
AND (([forms].[frmCerca].[txtNSeriale]) Is Null) AND ((tblrma.ngaranzia)
Like [forms].[frmCerca].[txtNGaranzia]) AND (Not
([forms].[frmCerca].[txtNGaranzia]) Is Null)) OR (((tblnotebook.idnotebook)
Like [forms].[frmCerca].[cmbNotebook]) AND ((tblclienti.cliente) Like
[forms].[frmCerca].[txtCliente]) AND ((tblrma.nrma) Like
[forms].[frmCerca].[nrma]) AND (Not ([forms].[frmCerca].[nrma]) Is Null) AND
((tblrma.serialn) Like [forms].[frmCerca].[txtNSeriale]) AND (Not
([forms].[frmCerca].[txtNSeriale]) Is Null) AND
(([forms].[frmCerca].[txtNGaranzia]) Is Null)) OR (((tblnotebook.idnotebook)
Like [forms].[frmCerca].[cmbNotebook]) AND ((tblclienti.cliente) Like
[forms].[frmCerca].[txtCliente]) AND (([forms].[frmCerca].[nrma]) Is Null)
AND ((tblrma.serialn) Like [forms].[frmCerca].[txtNSeriale]) AND (Not
([forms].[frmCerca].[txtNSeriale]) Is Null) AND
(([forms].[frmCerca].[txtNGaranzia]) Is Null)) OR (((tblnotebook.idnotebook)
Like [forms].[frmCerca].[cmbNotebook]) AND ((tblclienti.cliente) Like
[forms].[frmCerca].[txtCliente]) AND ((tblrma.nrma) Like
[forms].[frmCerca].[nrma]) AND (Not ([forms].[frmCerca].[nrma]) Is Null) AND
(([forms].[frmCerca].[txtNSeriale]) Is Null) AND
(([forms].[frmCerca].[txtNGaranzia]) Is Null)) OR (((tblnotebook.idnotebook)
Like [forms].[frmCerca].[cmbNotebook]) AND ((tblclienti.cliente) Like
[forms].[frmCerca].[txtCliente]) AND (([forms].[frmCerca].[nrma]) Is Null)
AND (([forms].[frmCerca].[txtNSeriale]) Is Null) AND
(([forms].[frmCerca].[txtNGaranzia]) Is Null));
ma stranamente la prima non funziona e la seconda si :-(
Guardando la sintassi SQL sembra tutto logicamente corretto eppure... idee ?
Thanks
Fabio

ok ok , sorry...faccio tutto io lo so...soprattutto il casino :-)
ora ho capito il significato dell' & "*" e ora funge!
Certo che il tuo esempio a mio avviso e' migliore di quello proposto sul
sito comune...perche' non inserirlo ?
Fabio che ti ringrazia molto!

...ehm ehm... non e' proprio oro tutto quel che luccica...
facendo con l'OR dopo non si riesce a fare la selezione di un valore in
quanto comunque vengono mostrati tutti :-(


E' per questo che io ho usato AND.


> E' per questo che io ho usato AND.
Mhmm...sai che non ho mica capito: l'AND lo usi si ma per unire due OR
includi su due campi di ricarca diversi...
SELECT Tabella1.*
FROM Tabella1
WHERE (((Tabella1.Campo1) Like [Digita primo parametro di ricerca:] & "*" Or
(Tabella1.Campo1) Is Null) AND ((Tabella1.Campo2) Like [Digita secondo
parametro di ricerca:] & "*" Or (Tabella1.Campo2) Is Null));
per cui comunque ti fara' vedere tutti i valori in tabella.
La mia situazione e' (come avrai forse anche visto in un post piu' recente)
quella di avere i seguenti campi:
n_rma
n_di_serie
n_di_garanzia
data_rientro
data_uscita
ognuno di questi campi puo' contenere un valore oppure essere nullo...
quello che server e' listarli tutti se non specifico parametri e listare
solo quelli corrispondenti se immetto dei valori...con il tipo di query
sopra cio' non mi sembra possibile... e come al solito puo' essere che mi
sbagli e che non riesca a vedere la cosa...
Grazie!
Fab

"Fabietto" <fab...@NOSPAMsupereva.it> ha scritto nel messaggio
news:qviG7.24752$zu5.9...@news1.tin.it...

Scusami se ti faccio una domanda: ma hai provato ad usare la query che ti ho
postato?


Roberto, grazie per la tua pazienza...
Ho provato la tua query ed eccola anche applicata:
SELECT tblnotebook.idnotebook, tblnotebook.notebook, tblclienti.cliente,
tblrma.nrma, tblrma.serialn, tblrma.ngaranzia, tblrma.dataarrivo,
tblrma.datauscita, tblrma.idrma
FROM tblnotebook INNER JOIN (tblclienti INNER JOIN tblrma ON
tblclienti.idcliente = tblrma.idcliente) ON tblnotebook.idnotebook =
tblrma.idnotebook
WHERE (((tblnotebook.idnotebook) Like [forms].[frmCerca].[cmbNotebook]) AND
((tblclienti.cliente) Like [forms].[frmCerca].[txtCliente]) AND
((tblrma.nrma) Like [forms].[frmCerca].[nrma] & "*" Or (tblrma.nrma) Is
Null) AND ((tblrma.serialn) Like [forms].[frmCerca].[txtNSeriale] & "*" Or
(tblrma.serialn) Is Null) AND ((tblrma.ngaranzia) Like
[forms].[frmCerca].[txtNGaranzia] & "*" Or (tblrma.ngaranzia) Is Null));
pero', se non sono proprio cecato :)) , cosi' facendo lui controlla
parametro per parametro ma essendoci l'OR in mezzo per il caso NULL anche
specificando un parametro ti mostrera' comunque i record impostati a null
... non e' cosi' ?
Fabio

"Fabietto" <fab...@NOSPAMsupereva.it> ha scritto nel messaggio
news:PwqG7.23901$zl4.6...@news2.tin.it...

Sono convinto che il codice SQL che ti ho postato fa al caso tuo.
Comunque se Tabella1 ha la struttura del mio messaggio del 6 novembre ore
11:20 e Campo1 e Campo2 sono di tipo testo, prova in alternativa con una
query che abbia il seguente codice SQL:
SELECT Tabella1.*
FROM Tabella1
WHERE (((IIf(IsNull([Campo1]),"ZZZZZZZ",[Campo1])) Like [Digita primo
parametro di ricerca:] & "*") AND
((IIf(IsNull([Campo2]),"ZZZZZZZ",[Campo2])) Like [Digita secondo parametro
di ricerca:] & "*"));
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
Se la struttura di Tabella1