DCount e Conteggio

di il
7 risposte

DCount e Conteggio

In seguito a queste discussioni
https://www.iprogrammatori.it/forum-programmazione/access/contare-record-con-valore-massimo-minimo-t16297.html?hilit=DCount
https://www.iprogrammatori.it/forum-programmazione/access/contare-record-una-tabella-t18197.html
devo confessare di avere ancora lacune sulle corrette sintassi di DCount (e similari). Purtroppo inciampo spesso nel terzo campo (criteri) e, quando non riesco a venirne a capo, preferisco costruire una query a parte e contare i suoi record con la sintassi più semplice
DCount("*";"NomeQuery";"")
Il primo dei due link segnalati, nella parte finale della discussione, mi ha insegnato che occorre impostare diversamente la sintassi se si tratta di campo Testo da Numerico (apici doppi, senza apici doppi, apici singoli...che casino!).
Ho costruito una maschera con una serie di caselle di testo "libere" in cui sto testando, a titolo statistico, una serie di DCount.
Ora ho una tabella Prestiti (in cui contabilizzo gli oggetti prestati) con alcuni campi Data, IDPersona, ecc... Non riesco a impostare delle corrette sintassi sul campo Data, ad es.
=DCount("*";"Prestiti";"[Data]>1/1/2010"
=DCount("*";"Prestiti";"[Data]>'1/1/2010'"
=DCount("*";"Prestiti";"[Data]=Between 1/1/2010 And 31/12/2013"
=DCount("*";"Prestiti";"[Data]=Between '1/1/2010' And '31/12/2013'"
...ho provato anche con gli apici singoli al posto di apici doppi in criteri, ma mi dà sempre errore.
Quali sono le corrette sintassi sia per il >, sia per il Between per il campo [Data]?

Dalla guida in linea, sull'argomento DCount, leggo quanto segue:
"Se si desidera semplicemente contare tutti i record contenuti in dominio senza specificare alcuna limitazione, utilizzare la funzione Conteggio."
Mi pare di capire che anzichè usare la sintassi
=DCount("*";"NomeQuery";"")
conviene usare la sintassi
=Conteggio([NomeQuery])
l'ho testata ma mi dà sempre Errore.
Come, quando, dove si usa la funzione Conteggio?

7 Risposte

  • Re: DCount e Conteggio

    Il problema dei criteri nel tuo caso è la formattazione delle date nient'altro...!
    Perchè ti funziona con una Query e non con il codice esplicito....?

    Perchè quando inserisci i riferimenti nella query il motore di JET corregge gli errori concettuali che tu commetti...

    In sostanza il campo Data subisce una PREFORMATTAZIONE perchè JET lo vuole in formato ANGLOSASSONE(anzi ISO Standard in realtà YYYYMMDD) mm/dd/yyyy... mentre tu lo hai in formato ITALIANO gg/mm/aaaa

    Prova a leggerti questo TUTORIAL:
    http://forum.masterdrive.it/microsoft-office-access-vba-23/vba-jet-tutorial-uso-campi-data-56461/

    Di fatto l'uso del DCOUNT deve rispettare la sintassi degli ESEMPI 2,3 e 4...
  • Re: DCount e Conteggio

    OK @Alex, cercherò di leggere miticolosamente il tuo tutorial.
    Ma mi spieghi Conteggio che cosa è? Quando si usa? Perchè a me non ha mai funzionato?
  • Re: DCount e Conteggio

    La funzione conteggio si usa all'interno di una Maschera, ed effettua il conteggio relativo ad un Controllo presente in maschera... e normalmente ha senso se la maschera è continua.
    E' equivalente al CONTEGGIO della Query, quindi alla Funzione di AGGREGAZIONE o COUNT nella fattispecie, ma ovviamente funziona sugli Oggetti accessibili, quindi nelleQuery i Campi, nella maschera i Controlli...!

    Di fatto non funziona se uno di questi controlli è NULL, a meno che non si inserisca
    
    =Conteggio(*)
    Diciamo che parallelamente alla funzione CONTEGGIO spesso si usa la funzione SOMMA(...) per ottenere i TOTALI a piè di pagina nelle Form continue sempre.

    Puoi avere una panoramica più estesa leggendo questo:
    http://office.microsoft.com/it-it/access-help/esempi-di-espressioni-HA010096295.aspx

    Personalmente non li uso perchè presenta delle anomalie in caso di Form/SubForm... e in caso di FILTRI... preferisco un controllo calcolato da valorizzare su Current.
  • Re: DCount e Conteggio

    @Alex ha scritto:


    La funzione conteggio si usa all'interno di una Maschera, ed effettua il conteggio relativo ad un Controllo presente in maschera... e normalmente ha senso se la maschera è continua.
    E' equivalente al CONTEGGIO della Query, quindi alla Funzione di AGGREGAZIONE o COUNT nella fattispecie, ma ovviamente funziona sugli Oggetti accessibili, quindi nelleQuery i Campi, nella maschera i Controlli...!
    Buono a sapersi, perchè se non me lo dicevi tu, questa frase di seguito

    OsvaldoLaviosa ha scritto:


    Dalla guida in linea, sull'argomento DCount, leggo quanto segue:
    "Se si desidera semplicemente contare tutti i record contenuti in dominio senza specificare alcuna limitazione, utilizzare la funzione Conteggio."
    a me suona di bufala.
    Vuol dire che continuerò a usare la pur sempre affidabile sintassi:
    DCount("*";"NomeTabella";"")
    che fino ad ora ha sempre funzionato e mi ha dato molte soddisfazioni.
    Grazie!
  • Re: DCount e Conteggio

    Si se scrivi Conteggio(*) Funziona... anche...!

    L'uso di DCOUNT o DSUM, al posto di Conteggio o Somma, è molto discusso e discutibile...
    Concettualmente si dovrebbe usare Conteggio e Somma, perchè sono afferenti al controllo in essere, indipendentemente da FILTRI, quello che vedi è quello che viene trattato...!

    Ipotizza di realizzare una maschera continua, e nel piè di maschera metti 2 TextBox:
    1° usando DCOUNT e/o DSUM
    2° usando Conteggio e/o Somma

    Ora ipotizza di applicare un filtro in base a selezione... cosa pensi di vedere nelle 2 TextBox...?
    Secondo te quale delle 2 FUNZIONA...?

    Da quì poi lascio a te le considerazioni di come gestire queste cose, e l'affidabilità della funzione Conteggio...
  • Re: DCount e Conteggio

    @Alex ha scritto:


    Ipotizza di realizzare una maschera continua, e nel piè di maschera metti 2 TextBox:
    1° usando DCOUNT e/o DSUM
    2° usando Conteggio e/o Somma
    Ora ipotizza di applicare un filtro in base a selezione... cosa pensi di vedere nelle 2 TextBox...?
    Ho fatto questo test e mi rendo conto che Conteggio significa "conta ciò che vedi", quindi si può applicare soltanto con gli oggetti aperti, oppure diventa ottimo nelle query di Conteggio appunto.
    OK, adesso tutto mi è più chiaro e direi pure che le due funzioni mi appaiono completamente diverse.
    Grazie, la tua spiegazione è stata molto più lampante della guida in linea.
  • Re: DCount e Conteggio

    Buongiorno a tutti

    vi scrivo perchè ho dei problemi che non riesco a risolvere con un conteggio... però mi sa che il giro è lungo.. ma non importa... se qualcuno può aiutarmi.. ho tempo per creare queries !

    In pratica .. sto lavorando su access...
    in una tabella ho tot. campi con dei voti (4-5-6-7)

    es.
    tabella:
    tab_valutazione Fornitori
    campo:
    RISORSE UMANE

    ogni record (fornitore) è compilato con qst votazioni...

    se voglio conteggiare per ogni record quanti 5 ha o quanti 4 ha ...come posso fare????

    aiutatemi vi prego... !!
    spero di essermi spiegata bene.
    grazie
    b.
Devi accedere o registrarti per scrivere nel forum
7 risposte