Queries

2.7 Visualizzare tutti i records con una query parametrica.
  Federico Luciani
(D)
Se uso una query parametrica come posso fare per visualizzare tutti i records, compresi i Null, visto che se non inserisco il parametro non viene visualizzato nulla?

(R)
In generale, in una query parametrica se non si inserisce il parametro non viene visualizzato nessun record.
Se il campo è un campo testo, si potrebbe decidere di utilizzare un criterio del tipo Like [parametro] & "*", ed in questo caso, in assenza di parametro, verrebbero visualizzati tutti i records con il campo parametrizzato diverso da Null (Attenzione: vi ricordo che il Null è diverso da stringa a lunghezza zero).
Noi però vogliamo visualizzarli tutti, compresi i Null. Come fare?

Forse non tutti sanno che in una query è possibile utilizzare il parametro come campo, cioe' è possibile visualizzare il valore inserito come parametro, in una colonna.
Ad esempio, per la tabella 'Impiegati', create una query con parametro [Inserisci cognome] sul campo 'Cognome', poi inserite [Inserisci cognome] in un nuovo campo.
In SQL diventa:
PARAMETERS [Inserisci cognome] Text;
SELECT Cognome, [Inserisci cognome]
FROM Impiegati
WHERE Cognome Like [Inserisci cognome] & "*"
Se la eseguite, vedrete che verranno visualizzati due campi, nel primo, il valore trovato (es. 'Davolio'), nel secondo, il valore cercato (es. 'dav').

Questa possibilità ci aiuta molto per risolvere il problema principale, infatti se è possibile utilizzare il parametro come campo, sarà anche possibile definirci dei criteri.
Modificate la precedente query in questo modo:
PARAMETERS [Inserisci cognome] Text;
SELECT Cognome, [Inserisci cognome]
FROM Impiegati
WHERE Cognome Like [Inserisci cognome] & "*" OR  [Inserisci cognome] Is Null
Come potete vedere è stato inserito un nuovo criterio. Questa volta cerchiamo tutti i records che hanno nel campo Cognome un valore che inizia con [Inserisci cognome] oppure tutti i records che hanno il campo [Inserisci cognome] con valore Null.
Provate ad eseguire la query e a non inserire alcun parametro; verranno visualizzati tutti i records!!
A questo punto il meccanismo dovrebbe essere chiaro: se inserite un parametro, il campo [Inserisci cognome] visualizzerà quel valore per tutti i records e quindi non sarà mai Null; se, al contrario, non inserite un parametro, tale campo sarà Null per tutti i records e quindi, a prescindere dal valore del campo Cognome, verranno visualizzati tutti.

Con questo sistema è possibile creare delle query parametriche molto complesse.
Ad esempio possiamo creare una query sulla tabella Ordini, parametrizzando il campo 'DataOrdine'.
In particolare vogliamo poter visualizzare in alternativa:
 - tutti gli ordini con 'DataOrdine' compresa tra due date, [Ordini dal] e [Ordini al];
 - tutti gli ordini con 'DataOrdine' maggiore di [Ordini dal], se [Ordini al] non viene inserito;
 - tutti gli ordini con 'DataOrdine' minore di [Ordini al], se [Ordini dal] non viene inserito.
In SQL la query diventa:
PARAMETERS [Ordini dal] DateTime, [Ordini al] DateTime;
SELECT IDOrdine, DataOrdine
FROM Ordini
WHERE
((DataOrdine Between [Ordini dal] And [Ordini al]) AND (Not [Ordini dal] Is Null) AND (Not [Ordini al] Is Null))
OR
((DataOrdine<=[Ordini al]) AND ([Ordini dal] Is Null) AND (Not [Ordini al] Is Null))
OR
((DataOrdine>=[Ordini dal]) AND (Not [Ordini dal] Is Null) AND ([Ordini al] Is Null))
OR
(([Ordini dal] Is Null) AND ([Ordini al] Is Null))
ORDER BY DataOrdine
Le tabelle Impiegati e Ordini, sono quelle contenute in Northwind.mdb.


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.