Query filtra dati in base a caselle combinate

di il
9 risposte

Query filtra dati in base a caselle combinate

Buona sera,
quest'oggi sono davanti ad un problema simile al mio ultimo thread. Spero di essere migliorato rispetto all'ultima volta.
Ho una query che pesca dati numerici da una sola tabella ed esegue dei calcoli (NB ho bisogno di far eseguire tali caoli direttamente alla query perchè poi utilizzo questi valori in una query unione, giusto per chiarire..). Poi ho una maschera (collegata alla stessa tabella) con delle caselle combinate che utilizzo al solo scopo di "selezionare/scegliere" dei valori rispetto ad altri; una volta eseguita la scelta, in base alle selezioni, vorrei che la mia query eseguisse i suddetti calcoli solo su certi valori. Mi spiego meglio:
Le caselle combinate mi fanno scegliere tra ditta A, B e C, nonchè tra 2016, 2017, 2018. Se per esempio io seleziono ditta A e 2016, allora vorrei che la mia query mi eseguisse i caoli solo sui record che possiedono i valori ditta A e 2016 tra i loro campi.
Io pensavo di sfruttare il codice DoCmd.OpenQuery (dopo aggiornamento delle caselle combinate), ma non so come usarlo e non so se sia la scelta migliore.

Vi ringrazio molto per l'aiuto

Buone vacanze

Cordiali saluti

Jibi

9 Risposte

  • Re: Query filtra dati in base a caselle combinate

    Io non ho capito qual è il problema.
    DoCmd.OpenQuery andrebbe bene se hai previsto i corretti filtri parametri.
    Non condivido la scelta dell'evento "Dopo aggiornamento". Molto meglio un Click di pulsante.
  • Re: Query filtra dati in base a caselle combinate

    Ti ringrazio tantissimo per la risposta. Allora, per quanto riguarda il pulsante, poco dopo aver scritto il post ho deciso di far partire il codice da click di un pulsante. Per qaunto riguarda il filtro dei dati nella query, praticamente ciò di cui avrei bisogno credo sia un aprire la query con condizioni where. Forse il comando DoCmd.OpenQuery offre l'opportunità di inserire le where, sinceramente non lo so. Io uso l'omologo che apre un report e lì le posso inserire le where. Però non so nè se si sia possibile, nè se è la scelta più sensata.
    Cosa intendi con "se hai previsto i corretti filtri parametri"?

    Ti ringrazio moltissimo

    Jibi
  • Re: Query filtra dati in base a caselle combinate

    Siccome DoCmd.OpenQuery non prevede l'argomento WHERE, tu imposti in visualizzazione struttura query quei 2 filtri parametro.
    Come si chiama la maschera che piloterebbe i 2 filtri query?
    Come si chiamano le 2 caselle combinate?
  • Re: Query filtra dati in base a caselle combinate

    Ho capito, grazie mille Osvaldo.
    la maschera si chiama "Scelta"
    le caselle combinate si chiamano CasellaCombinata1 (mostra le ditte) e CasellaCombinata3 (mostra gli anni).
    Sto provando a inserire i criteri ma senza esito...
    Ancora grazie mille



    Jibi
  • Re: Query filtra dati in base a caselle combinate

    jibi ha scritto:


    ...Sto provando a inserire i criteri ma senza esito...
    Hai tre strade principali percorribili:
    1) creare una query che punta, nei criteri, direttamente ai valori presenti nella maschera
    2) creare una query parametrica (che nei testi più superficiali viene indicata come quella di cui al punto uno)
    3) creare una stringa che corrisponde alla query di cui al punto 1.

    Mi sembra di intuire che si tratta di una query di aggiornamento, per la quale non userei DoCmd.OpenQuery ma QueryDef.Execute (se scegli la strada di cui al punto 2) oppure DbEngine.Execute (se scegli per la 3). Per il loro uso ti rinvio ad una ricerca sulla documentazione ufficiale Microsoft (e alle altre mille risorse disponibili sul web, oltre i testi "classici", quelli di carta)

    In tutti i casi la cosa non è semplicissima, quindi dovrai studiare un po' prima di arrivare a qualcosa di decente. Vedo che già hai qualche difficoltà a creare un criterio "multiplo", quindi va' con i piedi di piombo. Occhio perché le query di aggiornamento (come in generale tutte le action query) non danno possibilità di ripensamenti quindi prima verificare su una equivalente query di selezione se i record interessati sono veramente quelli voluti e poi salvataggi, molti salvataggi, per non trovarsi le tabelle vuote o modificate in modo irreversibile.
  • Re: Query filtra dati in base a caselle combinate

    jibi ha scritto:


    la maschera si chiama "Scelta"
    le caselle combinate si chiamano CasellaCombinata1 (mostra le ditte) e CasellaCombinata3 (mostra gli anni).

    Philcattivocarattere ha scritto:


    2) creare una query parametrica
    Io ignoro tutto il discorso dei calcoli, query unione, eventuale query di aggiornamento...
    Nella query in visualizzazione struttura, in corrispondenza di Criteri:
    alla colonna Ditta scrivi:
    [Maschere]![Scelta]![CasellaCombinata1]
    alla colonna Anno scrivi:
    [Maschere]![Scelta]![CasellaCombinata3]
  • Re: Query filtra dati in base a caselle combinate

    Allora, vi ringrazio entrambi per la disponibilità dimostratami, grazie davvero. Ho provato prima con quanto ha scritto Osvaldo, e purtroppo quando la query si apre non mi fa vedere nessun record, come se avesse filtrato nulla, vuoto. Ho pensato che fosse per via del fatto che nella query ci sono campi in cui si eseguono calcoli , allora ho fatto una query con solo quei due campi, ma il risultato è lo stesso.
    Allego codice della query appena creata per fare una prova (i nomi della combo sono cambiati):
    SELECT Misurazioni.anno, Misurazioni.ditta
    FROM Misurazioni
    WHERE (((Misurazioni.anno)=[Maschere]![Visualizza dati]![CasellaCombinata23]) AND ((Misurazioni.ditta)=[Maschere]![Visualizza dati]![CasellaCombinata19]));
    Questa invece è la query originaria di cui vi parlavo all'inizio, intonsa, senza aver applicato nessun criterio. I nomi degli oggetti gli ho poi cambiati per necessità, scusate,
    SELECT Round(Avg([Misurazioni]![assenza_sorgente]),4) AS MF, Round(Avg([Misurazioni]![con_sorgente]),4) AS ML, [ML]-[MF] AS Ms, Round(Var([Misurazioni]![assenza_sorgente]),4) AS [?F^2], Round(Var([Misurazioni]![con_sorgente]),4) AS [?L^2], Round(Sqr(Nz(Var([Misurazioni]![assenza_sorgente]),0)+Nz(Var([Misurazioni]![con_sorgente]),0)),4) AS ?s, Round([Ms]+(Sqr(Nz(Var([Misurazioni]![assenza_sorgente]),0)+Nz(Var([Misurazioni]![con_sorgente]),0)))*3,4) AS [Estremo superiore], Round([Ms]-(Sqr(Nz(Var([Misurazioni]![assenza_sorgente]),0)+Nz(Var([Misurazioni]![con_sorgente]),0)))*3,4) AS [Estremo inferiore], 3*[?s] AS 3?s
    FROM Misurazioni;
    Come vedete, si tratta solo di campi contenenti calcoli

    Per quanto riguarda quanto ha scritto Phil, ti ringrazio molto per i suggerimenti dati e mi informerò meglio dalle risorse online di office per esempio. Tengo a precisare che ho provato prima con la soluzione di Osvaldo opichè apparentemente più alla portata delle mie abilità... è necessario ora che analizzi con molta attenzione quanto tu hai scritto. In ogni caso tengo a descrivere con più chiarezza la query in questione: collegata ad una sola tabella, pesca da essa solo valori numerici e ne esegue calcoli matematici (varianza, radici ecc..), non possiede nessun campo che non sia una operazione matematica e non sono presenti alcuni criteri se non quelli suggeriti da Osvaldo (che ho applicato a due nuovi campi "classici" che mi mostrano i campi Anno e Ditta.

    Se dovesse servire ecco una copia del database (ho tolto il superfluo e i dati sensibili)


    Vi ringrazio molto per il tempo dedicatomi

    Jibi
  • Re: Query filtra dati in base a caselle combinate

    Ho risolto scrivendo parameter , group by e having in sql e funziona !!! grazie a tutti, buon anno!!!

    Jibi
  • Re: Query filtra dati in base a caselle combinate

    Incurosito sono andato a vedere il tuo progetto e provato ad apportare delle modifiche per renderlo forse più interessante, qui il link
    ****.
    • Ci sarebbe comunque, secondo me, da rivedere la struttura delle tabelle dove i campi Ditta, Oggetto, Documento, Meteo dovrebbero essere gestiti tramite delle tabelle specifiche separate e relazionate alla tabella Misurazioni tramite opportuni campi ID.
    • Nella tabella Misurazioni bisognerebbe impostare l'obbligatorietà o meno dei campi.
    • La maschera mMisurazione sarebbe naturalmente da implementare ulteriormente, almeno nel fatto di impedire l'eventuale possiiblità di creare doppioni.
Devi accedere o registrarti per scrivere nel forum
9 risposte