Query per contare record con distinct e count

di il
57 risposte

57 Risposte - Pagina 2

  • Re: Query per contare record con distinct e count

    2 cose
    In manuale il dcount dunque non e inserito da qualche parte nella tabella, non viene calcolato dalla tabella, ma solo memorizzato?

    In automatico, ne so molto poco di vb, mi piacerebbe implementare questa soluzione. Ma per cominciare.. Dove lo scrivo il codice? Non da qualche parte nella tabella giisto?
  • Re: Query per contare record con distinct e count

    stefanocps ha scritto:


    In manuale il dcount dunque non e inserito da qualche parte nella tabella, non viene calcolato dalla tabella, ma solo memorizzato?
    Deficentemente parlando, io apro la query Apollo e vedo quanti record tiene, esempio 54. Chiudo Apollo e vado a scrivere io manualmente 54 in corrispondenza di Apollo nella tabella RiepilogoTrimestrale.
    Diciamo che manualmente il ragionamento DCount va a fari benedire.

    stefanocps ha scritto:


    In automatico, ne so molto poco di vb, mi piacerebbe implementare questa soluzione. Ma per cominciare.. Dove lo scrivo il codice? Non da qualche parte nella tabella giisto?
    Il codice VBA si scrive nei Moduli e non sono gestibili dalle tabelle. Non ti sto a tediare su cosa sono i Moduli, loro classificazioni ecc... Volgarmente parlando, giusto per cominciare:
    1. Crea una maschera che chiamerai Prova
    2. Su di essa aggiungi un pulsante che chiamerai CompilaRiepilogoTrimestrale
    3. Tra le proprietà del pulsante ce ne è una che si chiama "Su clic", con il mouse avvicinati alla sua estrema destra e clicca sul pulsante con 3 puntini
    4. Ti chiederà cosa vuoi compilare, scegli "codice"
    5. Si aprirà la finestra dell'editor VBA con il primo e ultimo rigo del codice già compilati. Dentro devi scriverci il tuo codice VBA. Ti serve imparare un po' di sintassi base. Se leggi attentamente il link che ti ho suggerito, sfrutti ciò che ti serve, dovresti farcela.
    6. Alla fine salva tutto
  • Re: Query per contare record con distinct e count

    Credo di aver capito
    Per quanto riguarda il manuale il fraintendimento era proprio quello, a che serve fare quella tabella in manuale, a questo punto metterei direttamente il valore nel report finale, ma in ogni caso non è una cosa proponibile, ogni volta sono 60-70 query da lanciare e rilevare tutti i valori in manuale non è pensabile
    Provero a scrivere il codice partendo dall amschera, aveva intuito che bisogna partire da un pulsante...
    a piu tardi per aggiornamenti
  • Re: Query per contare record con distinct e count

    Ok ci sto provando ma imparare a scrivere un vb da quasi niente in poco tempo è abbstanza difficile, converrai
    ci sono due parti di codice che mi hai suggerito, la prima quella del link che serve ad aprire la tabella che conterra i valori
    poi con le tue istruzioni assegno i valori
    posto che CALCOLI è il nome della tabella su cui andranno i valori, e ElemF è la query che contiene i valori da contare io sono partito con questo
    
    Dim DBCorrente As DAO.Database
    Dim Tabella As DAO.Recordset
    Set DBCorrente = CurrentDb
    Set Tabella = DBCorrente.OpenRecordset("Calcoli", dbOpenDynaset)
    NomeRecordset.Edit
    NomeRecordset.Fields("Query") = "ElementariF"
    rs!NomeQuery = "ElemF"
    rs!ConteggioQuery = DCount("*", "Elemf")
    rs.Update
    Calcoli.Close
    DBCorrente.Close
    
    per ora ricevo errore qua
    
    NomeRecordset.Edit
    
  • Re: Query per contare record con distinct e count

    Edit si usa per "aggiornare", ma tu devi andare su "nuovo record", perciò ti serve AddNew.
    NomeRecordset non è stato dichiarato da nessuna parte. Invece devi scrivere Tabella.AddNew
    Credo non ti serve la riga dove dichiari Fields.
  • Re: Query per contare record con distinct e count

    Private Sub Comando67_Click()
    Dim DBCorrente As DAO.Database
    Dim Tabella As DAO.Recordset
    Dim NewRecord As Recordset
    Set DBCorrente = CurrentDb
    Set Tabella = DBCorrente.OpenRecordset("Calcoli", dbOpenDynaset)
    Tabella.AddNew
    NewRecord.Fields("Query") = "ElementariF"
    rs!NomeQuery = "ElemF"
    rs!ConteggioQuery = DCount("*", "Elemf")
    rs.Update
    Calcoli.Close
    DBCorrente.Close
    Mi da errore proprio sul Field,
    ma se lo tolgo come assegno il valore al campo, overo il nome della query di cui calcolero le ricorrenze?
  • Re: Query per contare record con distinct e count

    Quel rigo ha 2 errori:
    1. Quando si assegna un Recordset si usa mettere Set all'inizio
    2. Toglilo, non ti serve

    Il nome query tu lo stai dando con l'istruzione
    rs!NomeQuery = "ElemF"
  • Re: Query per contare record con distinct e count

    Ho pensato che se tu crei una tabella Queries con i seguenti campi:
    IDQuery (PK)
    NomeQuery
    e la popoli con tutti i nomi delle query, poi prova il seguente
    'Dichiarazioni variabili
    Dim DBCorrente As DAO.Database
    Dim rsRiepilogo As DAO.Recordset
    Dim rsQueries As DAO.Recordset
    Dim strTrimestre As String
    'assegni a strTrimestre un testo da digitare in una InputBox che poi...vedrai
    strTrimestre = InputBox ("Digita il Trimestre")
    'assegnazione del CurrentDB e apertura dei recordset di RiepilogoTrimestre e Queries
    Set DBCorrente = CurrentDB
    Set rsRiepilogo = DB.OpenRecordset("RiepilogoTrimestre", dbOpenDynaset)
    Set rsQueries = DB.OpenRecordset("Queries", dbOpenDynaset)
    rsQueries.MoveFirst
    'creo un ciclo che mi scorre tutti i record di Queries (rsQueries) e dove vado a impostare in tabella RiepilogoTrimestre (rsRiepilogo)
    Do Until rsQueries.EOF
         rsRiepilogo.AddNew
         rsRiepilogo!NomeQuery = rsQueries!NomeQuery
         rsRiepilogo!ConteggioQuery = DCount("*", rsQueries!NomeQuery)
         rsRiepilogo!Trimestre = strTrimestre
         rsRiepilogo.Update
         rsQueries.MoveNext
         rsRiepilogo.MoveNext
    Loop
    'chiusura dei recordset e del DBCorrente
    rsQueries.Close
    rsRiepilogo.Close
    DBCorrente.Close
    End Sub
    
    Quando si assegna a delle "variabili oggetto" (es. Database, Recordset) bisogna anteporre la parola Set.
    Quando si assegna a delle "variabili "normali"" (String, Integer…) l'assegnazione si fa con il classico =

    Prova e dimmi se funziona.
  • Re: Query per contare record con distinct e count

    Mi da errore qua
    Set rsRiepilogo = DB.OpenRecordset("Riepilogo", dbOpenDynaset)
    senti ma se devo mettere a mano tutti i nomi delle query dentro la tabella non vale la pena. Diventa un po come l'idea di mettere a mano tutti i dcount ( no meno peggio in realta i nome query li metto una volta sola)
    Comunque cosi ridiventa un lavorone enorme paragonabile a creare la query conteggio sulla query di selezione da cui ero partito
    L 'idea era che la tabella si popolasse da sola, col nome della query e col conteggio, ma se non fa questo mi pare un lavoro grande che non semplifica altre modalità che avevo gia individuato e che almeno potrei fare senza bisogno di aiuto dalla a alla z

    L 'idea iniziale di ottenere nella stessa query il select distinct e il Count non è fattibile?
  • Re: Query per contare record con distinct e count

    stefanocps ha scritto:


    Mi da errore qua
    Set rsRiepilogo = DB.OpenRecordset("Riepilogo", dbOpenDynaset)
    Ma come si chiama veramente la tabella? Io l'ho sempre chiamata RiepilogoTrimestre e così deve comparire in "RiepilogoTrimestre"

    stefanocps ha scritto:


    senti ma se devo mettere a mano tutti i nomi delle query dentro la tabella non vale la pena
    Se crei questa tabella e ci metti tutti i nomi delle query, non devi scrivere tutto in VBA poi.
    Io ti sto fornendo la soluzione meno dolorosa possibile...la programmazione è fatta anche di queste cose...non di colpi di bacchetta magica.

    stefanocps ha scritto:


    L 'idea era che la tabella si popolasse da sola, col nome della query e col conteggio, ma se non fa questo mi pare un lavoro grande che non semplifica altre modalità che avevo gia individuato e che almeno potrei fare senza bisogno di aiuto dalla a alla z
    Io mi fermo qui. Di meglio non saprei fare.
  • Re: Query per contare record con distinct e count

    La tabella l ho chiamata RIEPILOGO si chiamava diversamente, ma sulla base del codice l ho cambhiata
  • Re: Query per contare record con distinct e count

    Può darsi che non va bene dbOpenDynaset. Prova dbOpenTable.
    Per Queries potrebbe andare bene anche dbOpenForwardOnly.
  • Re: Query per contare record con distinct e count

    Non va ancora
    senti per chiarire
    tu hai fatto uso di tre nomi di tabelkle
    riepilogo
    riepilogtrimestre
    queries

    Forse le prime 2 dovrebbero essere la stessa?
    La tabella queries l 'ho creata ora e ci ho inserito dentro il nome di una query, quindi la tabella Riuepilogo o riepilogtrimestre dovra contere solo ID e COnteggio?
    su queste cose, sui nomi, misa che c'è un po di confusione
  • Re: Query per contare record con distinct e count

    stefanocps ha scritto:


    Forse le prime 2 dovrebbero essere la stessa?
    Esatto.
    Le tabelle di partenza sono RiepilogoTrimestre e Queries.
    Quando li faccio diventare recordset con il prefisso rs, per brevità ho scritto rsRiepilogo, ma non c'è alcun obbligo di ripetere lo stesso nome.

    stefanocps ha scritto:


    La tabella queries l 'ho creata ora e ci ho inserito dentro il nome di una query, quindi la tabella Riuepilogo o riepilogtrimestre dovra contere solo ID e COnteggio?
    Esatto.

    Il codice VBA presuppone che la tabella RiepilogoTrimestre (rsRiepilogo) sia piena. Inoltre che ci sia coerenza con i dati, ossia i nomi delle query.

    Aspetta, l'errore sta nel fatto che ho dichiarato DBCorrente As DAO.Database, mentre poi scrivo DB. Bisogna cambiare DB.OpenRecordset in DBCorrente.OpenRecordset.
  • Re: Query per contare record con distinct e count

    'Dichiarazioni variabili
    Dim DBCorrente As DAO.Database
    Dim rsRiepilogo As DAO.Recordset
    Dim rsQueries As DAO.Recordset
    Dim strTrimestre As String
    'assegni a strTrimestre un testo da digitare in una InputBox che poi...vedrai
    strTrimestre = InputBox ("Digita il Trimestre")
    'assegnazione del CurrentDB e apertura dei recordset di Riepilogo e Queries
    Set DBCorrente = CurrentDB
    Set rsRiepilogo = DBCorrente.OpenRecordset("Riepilogo", dbOpenDynaset)
    Set rsQueries = DBCorrente.OpenRecordset("Queries", dbOpenDynaset)
    rsQueries.MoveFirst
    'creo un ciclo che mi scorre tutti i record di Queries (rsQueries) e dove vado a impostare in tabella Riepilogo (rsRiepilogo)
    Do Until rsQueries.EOF
         rsRiepilogo.AddNew
         rsRiepilogo!NomeQuery = rsQueries!NomeQuery
         rsRiepilogo!ConteggioQuery = DCount("*", rsQueries!NomeQuery)
         rsRiepilogo!Trimestre = strTrimestre
         rsRiepilogo.Update
         rsQueries.MoveNext
         rsRiepilogo.MoveNext
    Loop
    'chiusura dei recordset e del DBCorrente
    rsQueries.Close
    rsRiepilogo.Close
    DBCorrente.Close
    End Sub
    Ho riscritto tutto considerando che la tua tabella si chiama Riepilogo (così preferisci tu) e correggendo il problema DB--->DBCorrente.
Devi accedere o registrarti per scrivere nel forum
57 risposte