Funzione Conteggio +1 NON FUNZIONA

di il
21 risposte

Funzione Conteggio +1 NON FUNZIONA

Buona sera a tutti, su una maschera ho aggiunto la funzione   =Conteggio ([CodiceProdotto])+1, per avere sempre un numero nuovo progressivo come codice articolo, ogni volta che ne salvo uno.

Poi premendo un pulsante sulla stessa maschera sposto il numero creato nel codice articolo  

Me.CodiceProdotto = Me.AppoggioCodiceProdotto (nel quale faccio l'operazione di aggiunte dell'unità)

ha funzionato tutto perfettamente fino a oggi quando, invece di “puntare” all'ultimo numero creato  ( 687), ed aggiungere 1, punta al 332, e non capisco perchè.

grazie di un aiuto e comunque.

21 Risposte

  • Re: Funzione Conteggio +1 NON FUNZIONA

    27/09/2023 - Eolo ha scritto:


    su una maschera ho aggiunto la funzione   =Conteggio ([CodiceProdotto])+1

    Dove? Su quale controllo (nome proprio)?

    27/09/2023 - Eolo ha scritto:


    ha funzionato tutto perfettamente fino a oggi quando, invece di “puntare” all'ultimo numero creato  ( 687), ed aggiungere 1, punta al 332, e non capisco perchè.

    Non vorrei che tu abbia cambiato l'ordinamento dei record…che so in base a un altro campo.
    Tuttavia, se non mostri chiaramente un recordset di valori (almeno io) non riesco a comprendere logica e metodo di quello che vuoi fare.

  • Re: Funzione Conteggio +1 NON FUNZIONA

    E il codice della funzione Conteggio qual è?

    E' la cosa fondamentale che dovevi mostrare 

  • Re: Funzione Conteggio +1 NON FUNZIONA

    28/09/2023 - oregon ha scritto:


    E il codice della funzione Conteggio qual è?

    E' la cosa fondamentale che dovevi mostrare 

    E' nativa

    Probabilmente il Campo o Controllo che usa ha dei valori NULL..?

     =NZ(Conteggio ([CodiceProdotto]),0)+1
  • Re: Funzione Conteggio +1 NON FUNZIONA

    Chiedo venia … non sono espertissimo delle funzioni native di Access

  • Re: Funzione Conteggio +1 NON FUNZIONA

    Sono delle Funzioni non del VBA, ma fanno parte di quegli accrocchi dell'interfaccia di Access che non si capisce bene dove si posizionano.

    In generale sarebbero da evitare nella parte SQL in quanto non scalabili, anche se accessibili, ma nell'interfaccia sono effettivamente comode.

  • Re: Funzione Conteggio +1 NON FUNZIONA

    Concordo sul ddoVerle evitare

  • Re: Funzione Conteggio +1 NON FUNZIONA

    BUONGIRONO a tutti, scusate per il ritardo nelle risposte, ma ultimamente mi rimane solamente il sabato mattina per queste cose.

    di fatto l'uso che vorrei / dovrei farne equivale alla numerazione progressiva delle fatture, ovvero vedo l'ultimo numero e ne genero uno nuovo aggiungendo +1.

    il problema è che ha funzionato tutto bene e correttamente fino ad un paio di settimane fa, poi tutto d'un tratto, invece di prendere l'ultimo numero e sommare +1, ha preso a caso  un numero, già creato.

     questa è la funzione che utilizzo, dove [CodiceSonda], rappresenta il numero progressivo “da incrementare di +1” 

    questo è quello che vedo, quando invece nella tabella mi trovo come ultimo numero creato questo

    onestamente ho catto altri DB con lo stesso sistema, francamente non conosco altri metodi, tuttavia ad oggi non mi era mai capitato che facesse questo difetto.

    grazie in anticipo.

  • Re: Funzione Conteggio +1 NON FUNZIONA

    07/10/2023 - Eolo ha scritto:


    di fatto l'uso che vorrei / dovrei farne equivale alla numerazione progressiva delle fatture, ovvero vedo l'ultimo numero e ne genero uno nuovo aggiungendo +1.

    Con un punto interrogativo sulla validità di questa procedura (è chiave primaria? ci sono altri utenti che nel frattempo possono inserire una fattura? ), l'errore alla base è l'utilizzo del Count.

    Con il Count non prendi l'ultimo numero usato ma conti quanti record ci sono. I risultati corrispondono solo se non hai buchi di numerazione e la numerazione non si resetta ad esempio per il cambio d'esercizio (salvo aver indicato una where condition con l'anno d'esercizio).

    Forse la funzione più adatta è Max() ma rifletti su tutto quanto ho scritto prima.

  • Re: Funzione Conteggio +1 NON FUNZIONA

    07/10/2023 - Eolo ha scritto:


    onestamente ho catto altri DB con lo stesso sistema, francamente non conosco altri metodi, tuttavia ad oggi non mi era mai capitato che facesse questo difetto.

    Ciao,

    adoperi un concetto e un approccio totalmente sbagliato, non affidabile e imprevedibile.

    Devi assolutamente cambiare approccio se vuoi non affidarti alla fortuna.

    Per esempio in un modulo puoi creare una function public che restituisce il valore desiderato.
    Poi questa la richiami in ogni contesto che vuoi, in una form, in una query, in un report, da codice Vba, etc etc etc…

    Esempio:

    ' GET FIRST FREE CODE
    Public Function MyGetFirstFreeCode() As Variant
    ' retrieve last code
    MyGetFirstFreeCode = DBEngine(0)(0).OpenRecordset("SELECT MAX(Code) AS MaxCode FROM TestLastCode;", dbReadOnly).Fields(0).Value
    ' set retun first free code
    If IsNull(MyGetFirstFreeCode) Then MyGetFirstFreeCode = 1 Else MyGetFirstFreeCode = MyGetFirstFreeCode + 1
    End Function
    

    Per esempio per ottenere tale valore in una form :

    Oppure in una Query :


    Per esempio puoi parametrizzare la function passando il nome della tabella e della colonna per la quale si vuole ottenere il primo codice libero, etc etc etc … In questo caso sfrutti la function anche con altre tabelle e sarà sufficiente passare il nome della tabella e il nome della colonna che contiene il codice per il quale si vuole reperire il primo codice libero:
    Esempio di come richiamare la function parametrizzata da codice (vedere la sub myTestFirstFreeCode() : 

    ' TEST
    Sub myTestFirstFreeCode()
    ' get first free code
    Dim lngNewCodeValue As Long
    lngNewCodeValue = MyGetFirstFreeCode("TestLastCode", "Code")
    ' display first free code
    MsgBox lngNewCodeValue
    End Sub
    
    '----------------------------------------------------------------
    ' GET FIRST FREE CODE
    Public Function MyGetFirstFreeCode(strYourTableName As String, strYourColumnName As String) As Variant
    ' retrieve last code
    MyGetFirstFreeCode = DBEngine(0)(0).OpenRecordset("SELECT MAX(" & strYourColumnName & ") AS MaxCode FROM " & _
                         strYourTableName & ";", dbReadOnly).Fields(0).Value
    ' set retun first free code
    If IsNull(MyGetFirstFreeCode) Then MyGetFirstFreeCode = 1 Else MyGetFirstFreeCode = MyGetFirstFreeCode + 1
    End Function

    In questo caso da Form o da Query si richiamerà la function come segue:


    Ricordati che per le colonne di ricerca o come in questo caso per un Numero Progressivo, indicizza sempre la colonna per avere delle prestazioni ottimali.

    Per esempio: per la colonna che contiene il codice progressivo impostare:

     


    Insomma, è un semplice esempio che garantisce in ogni circostanza di avere di ritorno un valore certo, sicuro e affidabile e non lasci nulla al caso o alla fortuna sperando che vada sempre bene.

    ;-))

  • Re: Funzione Conteggio +1 NON FUNZIONA

    La numerazione delle Fatture spesso non è Numerica, ma ALFANUMERICA, il che la definisce un Testo, e la generazione del progressivo è leggermente più articolata, in quanto spesso si ha la definzione in varie strutture di “ANNO/Progressivo”

    Se il tuo scopo è solo avere un valore INCREMENTALE, è da capire se lo devi memorizzare o meno… perchè se va memorizzato, questo valore non deve essere discrezionale, ma la formula va messa come DEFAULTVALUE del controllo associato e MAI PIU' TOCCATO.

    Questo campo poi è una PK o no…?

  • Re: Funzione Conteggio +1 NON FUNZIONA

    GRAZIE !!

    NON è chiave primaria

    nessuno, al momento, può utilizzare il programma

    ho usato questa funzione perchè conoscevo questa, e fino ad ora non mi ha mai dato problemi.

    mi andrebbe bene anche se alla fine dell'anno non si resetta.

    07/10/2023 - Philcattivocarattere ha scritto:


    07/10/2023 - Eolo ha scritto:


    di fatto l'uso che vorrei / dovrei farne equivale alla numerazione progressiva delle fatture, ovvero vedo l'ultimo numero e ne genero uno nuovo aggiungendo +1.

    Con un punto interrogativo sulla validità di questa procedura (è chiave primaria? ci sono altri utenti che nel frattempo possono inserire una fattura? ), l'errore alla base è l'utilizzo del Count.

    Con il Count non prendi l'ultimo numero usato ma conti quanti record ci sono. I risultati corrispondono solo se non hai buchi di numerazione e la numerazione non si resetta ad esempio per il cambio d'esercizio (salvo aver indicato una where condition con l'anno d'esercizio).

    Forse la funzione più adatta è Max() ma rifletti su tutto quanto ho scritto prima.

  • Re: Funzione Conteggio +1 NON FUNZIONA

    19/10/2023 - Eolo ha scritto:


    nessuno, al momento, può utilizzare il programma

    ho usato questa funzione perchè conoscevo questa, e fino ad ora non mi ha mai dato problemi.

    mi andrebbe bene anche se alla fine dell'anno non si resetta.

    l'approccio è errato e come vedi prima o dopo ti darà sempre dei problemi.

    riconsidera il tutto, di esempi e suggerimenti ti sono stati dati… 

    scegli una strada percorribile e corretta, sia dal punto di vista tecnico che logico

  • Re: Funzione Conteggio +1 NON FUNZIONA

    Ti ringrazio del lungo spiegone, tuttavia faccio fatica a capirlo, credo sia troppo tecnico per me in questo momento, proverò a capirlo con calma, pur rimanendo con il problema.

    grazie ugualmente

  • Re: Funzione Conteggio +1 NON FUNZIONA

    19/10/2023 - Eolo ha scritto:


    Ti ringrazio del lungo spiegone, tuttavia faccio fatica a capirlo, credo sia troppo tecnico per me in questo momento, proverò a capirlo con calma, pur rimanendo con il problema.

    grazie ugualmente

    Ma scusa tanto… in pratica cosa devi fare ? leggi una tabella e fai un conteggio di un certo campo ?

    Come si chiama la tua tabella ? 
    Come si chiama il campo dove eseguire il calcolo ? CodiceProdotto ? 

    27/09/2023 - Eolo ha scritto:


    Buona sera a tutti, su una maschera ho aggiunto la funzione   =Conteggio ([CodiceProdotto])+1, per avere sempre un numero nuovo progressivo come codice articolo, ogni volta che ne salvo uno.

    Guarda è molto semplice, passa le informazioni che ti ho richiesto… il nome della tabella e del campo da conteggiare 

Devi accedere o registrarti per scrivere nel forum
21 risposte