Newsgroup: it.comp.appl.access
Titolo: Restituire records con campi null

Ciao a tutti..
Il mio problema è questo:
Ho due tabelle in relazione uno-a-uno (Tabella1 e Tabella2).
In Tabella1 c'è il campo numerico (Anno1) e nella Tabella2 c'è il
campo numerico (Anno2).
Ho una query parametrica (Query) che fa riferimento ad una maschera
non associata (Maschera).
In Maschera ci sono i controlli (Anno1Dal), (Anno1Al), (Anno2Dal) e
(Anno2Al).
In Query ci sono i campi:
 - Anno1.Tabella1 con criterio Between
nz([Forms]![Maschera]![Anno1Dal];DMin("Anno1";"Tabella1")) And
nz([Forms]![Maschera]![Anno1Al];DMax("Anno1";"Tabella1"))
 - Anno2.Tabella2 con criterio Between
nz([Forms]![Maschera]![Anno2Dal];DMin("Anno2";"Tabella2")) And
nz([Forms]![Maschera]![Anno2Al];DMax("Anno2";"Tabella2")).
Quando imposto la ricerca da Maschera potrebbe non essere necessario
intervenire sui 4 controlli specificando, in tal modo, che voglio
prendere in considerazione l'intero periodo di Anno1 e di Anno2.
Quando in Maschera avevo solo i controlli Anno1Dal e Anno2Al (con i
relativi criteri in Query), tutto funzionava alla perfezione. Ma con
l'aggiunta di Anno2Dal e Anno2Al, se lascio i controlli vuoti, non mi
restituisce nessun record.
Dove sbaglio?
Vi ringrazio anticipatamente...

 Vi ringrazio anticipatamente...
Forse se posti il codice SQL della query forse č piů facile capirne il
comportamento.
Comunque DMin e DMax ti restituiscono un valore stringa, quindi, se come
penso Anno1 e Anno2 sono due campi numerici, prova con:
- Anno1.Tabella1 con criterio Between nz([Forms]![Maschera]![Anno1Dal];
Val(DMin("Anno1";"Tabella1"))) And nz([Forms]![Maschera]![Anno1Al];
Val(DMax("Anno1";"Tabella1")))
 - Anno2.Tabella2 con criterio Between nz([Forms]![Maschera]![Anno2Dal];
Val(DMin("Anno2";"Tabella2"))) And nz([Forms]![Maschera]![Anno2Al];
Val(DMax("Anno2";"Tabella2")))
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 Val(DMax("Anno2";"Tabella2")))
Niente da fare..
Ho provato con il tuo suggerimento, ma non c'è modo.
Provo a postarti il codice SQL.. solamente una parte, quella che
ritengo utile al nostro caso perché era lunghissimo!!
SELECT Ricorrenti.IDGrado, Ricorrenti.Cognome, Ricorrenti.Nome,
Ricorsi.Anno, [Dettagli ricorsi].Quadro
FROM (Ricorrenti INNER JOIN Ricorsi ON Ricorrenti.IDRicorrente =
Ricorsi.IDRicorrente) INNER JOIN [Dettagli ricorsi] ON
Ricorsi.IDRicorso = [Dettagli ricorsi].IDRicorso
GROUP BY Ricorrenti.IDGrado, Ricorrenti.Cognome, Ricorrenti.Nome,
Ricorsi.Anno, [Dettagli ricorsi].Quadro
HAVING (((Ricorrenti.IDGrado) Like
nz([Forms]![Parametri]![Grado],"*")) AND ((Ricorrenti.Cognome) Like
nz([Forms]![Parametri]![Cognome],"*")) AND ((Ricorrenti.Nome) Like
nz([Forms]![Parametri]![Nome],"*")) AND ((Ricorsi.Anno) Between
nz([Forms]![Parametri]![AnnoInizio],DMin("Anno","Ricorsi")) And
nz([Forms]![Parametri]![AnnoFine],DMax("Anno","Ricorsi"))) AND
(([Dettagli ricorsi].Quadro) Between
nz([Forms]![Parametri]![QuadroInizio],DMin("Quadro","Dettagli
ricorsi")) And nz([Forms]![Parametri]![QuadroFine],DMax("Quadro","Dettagli
ricorsi"))))
ORDER BY Ricorrenti.Cognome, Ricorrenti.Nome;
Legenda
Tabella1: Ricorsi
Tabella2: Dettagli ricorsi
Anno1:    Anno
Anno2:    Quadro
Anno1Dal: AnnoInizio
Anno1Al.  AnnoFine
Anno2Dal: QuadroInizio
Anno2Al:  QuadroFine
Grazie ancora per la disponibilità.

 ha scritto nel messaggio
news:478503f2.03071...@posting.google.com...

A parte ricordarti che DMin e DMax ti restituiscono un valore stringa,
l'unica cosa che io tenterei sarebbe quella di effettuare il filtrggio dei
dati attraverso la proposizione WHERE da porre prima di GROUP BY invece che
con la proposizione HAVING come hai fatto tu. La HAVING filtra i dati di
output della query e non so quanto sia giusto in essa far riferimento ai
dati di input della query stessa; mentre con la WHERE, che filtra i dati di
input della query, tutto mi sembrerebbe più regolare.


 input della query, tutto mi sembrerebbe piů regolare.
Il codice non l'ho scritto ma l'ho ottenuto dalla visuzlizzazione SQL
della struttura della query. Quindi, la proposizione HAVING, l'ha
creato la query stessa. Cmq, tutti gli altri parametri della query
fanno riferimento alla stessa proposizione e funzionano a dovere.
Perché mi da problemi solo l'ultima modifica fatta, vale a dire
Between nz([Forms]![Parametri]![QuadroInizio];DMin("Quadro";"Dettagli
ricorsi")) And nz([Forms]![Parametri]![QuadroFine];DMax("Quadro";"Dettagli
ricorsi"))
quando ce n'č un'altra praticamente uguale
Between nz([Forms]![Parametri]![AnnoInizio];DMin("Anno";"Ricorsi"))
And nz([Forms]![Parametri]![AnnoFine];DMax("Anno";"Ricorsi"))
che funziona benissimo?
Specifico che il campo Quadro č un campo numerico.

 Specifico che il campo Quadro č un campo numerico.
Apparentemente non c'č alcun motivo, ma sicuramente il motivo di non
funzionamento esiste anche se non č visibile nel codice SQL della query.
E' per questo che ti suggerivo di tentare di scrivere diversamente il codice
SQL.
Non č per caso che il campo [Dettagli ricorsi].Quadro ha valore Null?
E' chiaro che se cosě fosse, tutte le righe della quary per le quali il
campo [Dettagli ricorsi].Quadro ha valore Null non verranno visualizzate.


 campo [Dettagli ricorsi].Quadro ha valore Null non verranno visualizzate.
Avevo specificato, infatti, che il campo [Dettagli ricorsi].Quadro può
anche non essere incluso nella ricerca parametrica e, quindi,
considerato null (vale a dire, prendere in considerazione tutti i
record che hanno il campo [Dettagli ricorsi].Quadro vuoto).
Ad esempio:
se imposto
AnnoInizio:   2000
AnnoFine:     2003
QuadroInizio: 2000
QuadroFine:   2002
il risultato sarà una serie di record compresi prima tra il 2000 e il
2003 (Anno) ma che siano compresi anche tra il 2000 e il 2002
(Quadro).
Se invece imposto
AnnoInizio:   2000
AnnoFine:     2003
QuadroInizio: 
QuadroFine:   
vorrei che il risultato fosse una serie di record compresi tra il 2000
e il 2003 e che includesse quei record in cui il campo Quadro è ANCHE
null..

 wrote in message
478503f2.03072...@posting.google.com...

I record di una query che hanno valore Null in un campo per il quale si sono
indicati dei criteri di selezione non verranno mai estrratti a meno che nei
criteri non sia espicitato che vengano selezionati i valori Null; d'altra
parte Null non è il valore più basso ma è un NON valore e quindi dà
ugualianza solo se confrontato con Null, ovvero con un NON valore.
Sul Sito Comune (link qui sotto) troverai una soluzione per selezionare
anche i record che contengono Null nel campo su cui sono basati i criteri di
selezione.
