Queries

2.12 Query a campi incrociati parametrica
  Roberto
Ipotizziamo di avere una tabella chiamata Venduto che abbia una struttura simile:
IdMovimento             Contatore e chiave primaria
DataMovimento        Data/ora
Qtà                           Numerico
Ipotizziamo anche di voler creare, basandola su questa tabella, una query a campi incrociati che abbia come intestazione di riga l'anno della DataMovimento, come intestazione di colonna il mese in chiaro della DataMovimento e come valore la somma del campo Qtà.
Si creerebbe una query a campi incrociati che abbia il seguente codice SQL:
TRANSFORM Sum(Qtà) AS [Il valore]
SELECT Year(DataMovimento) AS Anno
FROM Venduto
GROUP BY Year(DataMovimento)
PIVOT Format(DataMovimento,"mmmm");
Ora ipotizziamo però che non vogliamo trattare tutti i record contenuti nella tabella ma solamente quelli relativi ad un determinato anno.
Per realizzare ciò modifichiamo il codice SQL della query aggiungendo in esso una proposizione WHERE rendendo così la query parametrica; il codice SQL diventerà il seguente:
TRANSFORM Sum(Qtà) AS [Il valore]
SELECT Year(DataMovimento) AS Anno
FROM Venduto
WHERE (((Year([DataMovimento]))=[Digita l'anno:]))
GROUP BY Year(DataMovimento)
PIVOT Format(DataMovimento,"mmmm");
Anche se il codice SQL di cui sopra risulta essere formalmente e sintatticamente corretto, ci accorgiamo con meraviglia che al momento dell'esecuzione della query Access si rifiuta di eseguirla e segnala un errore dove si dice:
Il modulo di gestione di database Microsoft Jet non riconosce '[Digita l'anno:]' come nome di campo o espressione valida.
Ciò è dovuto al fatto che Access, al contrario di quello che succede per gli altri tipi di query, pretende che per la query a campi incrociati venga esplicitato il tipo di dati degli eventuali suoi parametri di selezione.
Insomma, affinché la query venga eseguita è necessario modificare il suo codice SQL inserendo in testa ad esso una dichiarazione PARAMETERS per ogni parametro di selezione usato; quindi nel nostro caso la query a campi incrociati parametrica, per essere regolarmente funzionante, dovrà avere il seguente codice SQL:
PARAMETERS [Digita l'anno:] Short;
TRANSFORM Sum(Venduto.Qtà) AS [Il valore]
SELECT Year(DataMovimento) AS Anno
FROM Venduto
WHERE (((Year([DataMovimento]))=[Digita l'anno:]))
GROUP BY Year(DataMovimento)
PIVOT Format(DataMovimento,"mmmm");
Nel caso che invece di lavorare direttamente con il codice SQL della query a campi incrociati si vuole lavorare con la sua griglia di struttura occorrre aprire la griglia di struttura e dal menu Query occorre selezionare il comando Parametri… ; sulla finestra di dialogo che si aprirà, per ogni paramtro occorrerà indicare nella prima colonna della finestra il nome del parametro (nel nostro caso [Digita l'anno:]) e poi scegliere nella seconda colonna della stessa riga il tipo dati (per il nostro esempio Intero).
Nel caso in cui la query a campi incrociati non sia parametica ma fosse basata su una query di selezione parametrica il problema si riprone ugualmente; in questo caso per risolvere il problema occorre esplicitare il tipo dati dei parametri della query di selezione parametrica su cui è basata la query a campi incrociati.


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