Access Somma

di il
10 risposte

Access Somma


Cattura.JPG
Cattura.JPG

Buongiorno a tutti, sono una New Entry e ho bisogno di un aiuto. In access ho creato un archivio musica dove ho inserito centinaia di dati. Nella maschera principale dedicata agli autori ho la necessità di creare una sottomaschera (Opere) che mi calcola il totale dei i seguenti dati:
Album Pubblicati (totale)
Studio
Live
Raccolte
Colonne Sonore
Opere Audiovisive
Singoli
Film
Inserendo manualmente il numero di Opere effettuate: studio,live,raccolte ecc.... nella casella Album pubblicati mi deve dare il totale.
Grazie a tutti, spero di essere stato chiaro ed esaustivo, a tutti un buon lavoro.
Drum

10 Risposte

  • Re: Access Somma

    Ok ... cosa hai fatto tu in merito ? dovrebbe bastarti una SQL di raggruppamento che puoi gestire da vba e valorizzare controlli, oppure come hai detto tu avere una subform con i totali ma sempre da una SQL di raggruppamento devi passare.
    L'alternativa è fare n dcount ma ha meno senso avendone vari
  • Re: Access Somma

    Buongiorno e grazie, access non è come andare in bicicletta se non lo "mastichi" ogni giorno ti dimentichi qualcosa e così è successo. Ho creato nella tabella Autori i campi che mi interessano, poi ho creato la tabella Opere con gli stessi campi e ho collegato la relazione (penso di aver fatto bene) ma ora non so quale formula usare per questo semplice calcolo.
    Grazie
    Allegati:
    32600_048dc7c6c3dd73ab02c7e11ff20959ea.jpg
    32600_048dc7c6c3dd73ab02c7e11ff20959ea.jpg
  • Re: Access Somma

    Ok non ricordare tutto ma sai cos'è una query di access giusto? quindi saprai che "dietro" a ciò che puoi vedere graficamente nell'editor grafico delle query c'è codice SQL.
    Quindi parti da quello, poi puoi recuperare i totali da recordset vba (anche senza passare da una query ma direttamente inserendo SQL) oppure puoi creare una subform con origine dati l'SQL di raggruppamento (o anche query memorizzata se vai meglio ma è evitabile) ed inserirla nella form indicando i campi di "join"

    un esempio di SQL di raggruppamento è
    
    select CampoDiRaggruppamento, sum(variabileNumerica), count(id_record)
    from tuaTabella 
    group by CampoDiRaggruppamento
    
  • Re: Access Somma

    muttley005 ha scritto:


    L'alternativa è fare n dcount ma ha meno senso avendone vari
    Io proverei a percorrere questa via e ragionare per "infantili piccoli passi":
    1. Costruisci 7 query relativi ai 7 filtri (Studio, Live, Raccolte, Colonne Sonore, Opere Audiovisive, Singoli, Film). Ognuna di queste query deve avere sempre il campo [Autore] con il filtro parametro [Maschere]![TuaMaschera]![Autore]
    2. In ogni casella di testo relativa a ogni singolo calcolo di quanti sono i vari tipi di album, scrivi le seguenti sintassi:
    =DCount("*"; "NomeQueryStudio")
    =DCount("*"; "NomeQueryLive")
    =DCount("*"; "NomeQueryRaccolte")
    =DCount("*"; "NomeQueryColonneSonore")
    =DCount("*"; "NomeQueryOpereAudiovisive")
    =DCount("*"; "NomeQuerySingoli")
    =DCount("*"; "NomeQueryLive")
    ...ovviamente personalizza a tuo piacere i vari NomeQueryXXX
  • Re: Access Somma

    OsvaldoLaviosa ha scritto:


    muttley005 ha scritto:


    L'alternativa è fare n dcount ma ha meno senso avendone vari
    Io proverei a percorrere questa via e ragionare per "infantili piccoli passi":
    1. Costruisci 7 query relativi ai 7 filtri (Studio, Live, Raccolte, Colonne Sonore, Opere Audiovisive, Singoli, Film). Ognuna di queste query deve avere sempre il campo [Autore] con il filtro parametro [Maschere]![TuaMaschera]![Autore]
    2. In ogni casella di testo relativa a ogni singolo calcolo di quanti sono i vari tipi di album, scrivi le seguenti sintassi:
    =DCount("*"; "NomeQueryStudio")
    =DCount("*"; "NomeQueryLive")
    =DCount("*"; "NomeQueryRaccolte")
    =DCount("*"; "NomeQueryColonneSonore")
    =DCount("*"; "NomeQueryOpereAudiovisive")
    =DCount("*"; "NomeQuerySingoli")
    =DCount("*"; "NomeQueryLive")
    ...ovviamente personalizza a tuo piacere i vari NomeQueryXXX
    Questo suggerimento è il tipico esempio da usare per capire cosa non si deve fare.
    Contiene un errore sostanziale di concetto che non aggiunge nulla di sensato e costruttivo, ovvero rendere BLOCCATO il numero di TIPOLOGIE gestibili costringendo chi sviluppa a dover modificare il prodotto ad ogni eventuale VARIAZIONE.
    La contestazione è volta proprio alla LOGICA che di semplificativo ed elementare non ha nulla, è solo sbagliata, da non perseguire perchè INUTILE.

    Serve sviluppare uina capacità di analisi proprio per evitare di prendere queste iniziative.

    Da seguire il suggerimento di muttley005, realizzabile sia con una SubForm ma anche con una ListBox.
  • Re: Access Somma

    muttley005 ha scritto:


    ... oppure puoi creare una subform con origine dati l'SQL di raggruppamento (o anche query memorizzata se vai meglio ma è evitabile) ...
    Chiedo per mia ignoranza: perche' la query sarebbe da evitare?
    Io avrei creato una query con la tabella delle opere, il campo autore filtrato ed il campo calcolato del conteggio dei records per tipologia. Poi alla query associo la sottomaschera.
  • Re: Access Somma

    Mailman ha scritto:


    muttley005 ha scritto:


    ... oppure puoi creare una subform con origine dati l'SQL di raggruppamento (o anche query memorizzata se vai meglio ma è evitabile) ...
    Chiedo per mia ignoranza: perche' la query sarebbe da evitare?
    Io avrei creato una query con la tabella delle opere, il campo autore filtrato ed il campo calcolato del conteggio dei records per tipologia. Poi alla query associo la sottomaschera.
    Corretto procedi così, le query memorizzate sono più performanti, se poi non hai Criteri dinamici è perfetta.
    La query che ti è stata suggerita è perfetta, io userei una Listbox invevece della SubForm
  • Re: Access Somma

    @Alex ha scritto:


    ...
    Corretto procedi così, le query memorizzate sono più performanti, se poi non hai Criteri dinamici è perfetta.
    La query che ti è stata suggerita è perfetta, io userei una Listbox invevece della SubForm
    io dove possibile ho sempre usato SQL "al volo" cioè da vba lo costruisco e uso tramite recordset ... e ora tu mi dici che è + performante una query memorizzata???
    veramente?? e la spiegazione tecnica? almeno per imparare qualcosa e darmi una ragionevole certezza

    tornando al 3d si giusto l'uso di una listbox al posto della subform
  • Re: Access Somma

    muttley005 ha scritto:


    ...
    io dove possibile ho sempre usato SQL "al volo" cioè da vba lo costruisco e uso tramite recordset ... e ora tu mi dici che è + performante una query memorizzata???
    veramente?? e la spiegazione tecnica? almeno per imparare qualcosa e darmi una ragionevole certezza

    tornando al 3d si giusto l'uso di una listbox al posto della subform
    Si una query compilata è più performante, ma scendiamo nello specifico...!
    La scelta di gestire le Query via SQL, e con queste aprire il RS sono sicuramente l'opzione disponibile che rende flessibile la gestione...
    Ora che serva passare per un RS lo trovo oggetto di riflessione se devo essere sincero... e faccio il mio esempio:
    
    Dim sSQL As String
    sSQL="SELECT ......"
    DbEngine(0)(0).Querydefs("NomeQuery").SQL=sSQL
    Forms!Nomeform!NomeSubForm.Form.Requery
    Nessun codice aggiuntivo viene richiesto se non il requery per aggiornare la visualizzazione.
    Ovviamente lo stesso risultato lo si ottiene con il recordset.... ma intanto devi mantenere l'oggetto aperto in maschera o a livello globale, poi sicuramente richiede più codice e non ultimo "a mio avviso" meno intuitivo, sottolineo "a mio avviso" in quanto è evidente che della componente soggettiva serva tenerne conto...!
    Le query non hanno un costo a peso... ci sono e si usano.
    Tuttavia vorrei sempre ragionare sul fatto che non esiste una soluzione che a prescindere DEVE essere sempre meglio, ma è opportuno conoscerle tutte, ed a seconda dello scenario applicare quella migliore.

    In questo caso trovo inutile sia modificare la Query da codice che aprire un rs ed assegnarlo alla SubForm o ListBox... la query che hai suggerito che è corretta, non ha bisogno di modifiche, quella è e quella rimane... più comodo che averla salvata ed associata all'oggetto DataBound non credo ci sia da pensarci.
  • Re: Access Somma

    Grazie per la spiegazione ... c'è sempre da imparare
Devi accedere o registrarti per scrivere nel forum
10 risposte