Newsgroup: it.comp.appl.access
Titolo: Filtro a discrezione dell'utente

Devo gestire i dati di una query di raggruppamento, in funzione di alcuni
parametri forniti dall'utente.
I parametri sono tre:
1. Anno
2. Distretto (ID)
3. Comune (ID)
Ora, l'anno č un valore obbligatorio, mentre gli altri due no.
La query č del tipo:
SELECT A, B, C
FROM Tabella, Parametri
WHERE Anno = Parametri.Anno, FKDistretto = Parametri.IDDistretto, FKComune =
Parametri.IDComune
GROUP BY A, B, C
I valori del filtro li andrei a prendere da una tabella (nella quale salvo i
parametri fornito dall'utente).
Potreiusare un Join, ma il problema resta.
Resta, perchč, se l'utente non specifica uno dei due ultimi valori,
ovviamente, la query non mi restituisce nulla, oppure mi restituisce un
errore.
Ho tentato -cosě, alla cieca-, di usare l'asterisco (*), ma non ho ottenuto
nulla.
Ovviamente, la soluzione piů ovvia č quella di modificare da codice la
stringa WHERE, ma mi chiedevo se ci fosse un modo per scrivere una query,
che permettesse di evitare la modifica da codice della stringa SQL.
Me lo chiedo, soprattutto, perchč devo fare una ventina di query di questo
tipo, dovendole utilizzare per dei grafici semi-parametrici (dove i
parametri sono appunto SEMPRE questi tre campi).
Grazie in anticipo.

 Grazie in anticipo.
Ciao KOO, il criterio che usi è corretto se non chè invece dell "=" io
proverei con LIKE nella parte CRITERI :
 **** SELECT A, B, C
 **** FROM Tabella, Parametri
 **** WHERE Anno Like Parametri.Anno, FKDistretto Like Parametri.IDDistretto
 **** , FKComune Like Parametri.IDComune
 **** GROUP BY A, B, C
Prova se può fare al caso tuo.
@Alex.
-- 
Posted from  [62.98.13.124] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Prova se può fare al caso tuo.
Non va bene. Forse va bene per i campi di tipo testo, ma... mi spiego.
Nella WHERE, per ora, uso solo Anno.
Ho dichiarato una funzione (per leggere i valori dalla tabella dei
parametri):
Function STATPar(Voce As String) As Integer
    Dim tmpValore As Variant
    tmpValore = Nz(DFirst("[" & Voce & "]", "TAB_Statistiche_Parametri"),
"*")
    If tmpValore <> "*" Then
        Select Case Voce
            Case "IDComune"
                STATPar = CStr(tmpValore)
            Case Else
                STATPar = CInt(tmpValore)
        End Select
    End If
End Function
Questa, in base a cosa specifico nel campo "Voce", mi restituisce un valore.
La Where della stringa SQL è ora:
WHERE (((Year([DataRichiesta])) Like STATPar("Anno")))
Ora, essendo Anno un campo numerico, a quanto pare, se gli passo "*", la
query nonr estituisce niente. Se, invece, passo un valore, ottengo un
risultato.

 risultato.
Ciao KOO, ho recuperato una QRY con la quale estraggo record in base all'anno
e al mese contenuti in 2 Combo, ma credo sia pressochè simile al tuo caso.
SELECT Year([DataMov]) AS Anno, Month([DataMov]) AS Mese, TipoMovimento,Importo
FROM TblMovimenti
WHERE (((Year([DataMov])) Like _
       IIf(IsNull([Forms]![FrmGestione]![CboAnno]), _
       "*",[Forms]![FrmGestione]![CboAnno])) _ 
       AND ((Month([DataMov])) Like _ 
       IIf(IsNull([Forms]![FrmGestione]![CboMese]), _ 
       "*",[Forms]![FrmGestione]![CboMese])));
Non ho modificato nulla te la Posto così come io l'ho impostata, e non
mi da problemi, nel senso che se non inserisco l'anno o il mese mi
restutuisce il Recordset completo.....
Questo se ho effettivamente capito bene ciò che ti serve.....
@Alex.
-- 
Posted from  [62.98.48.155] 
