Funzione Conteggio +1 NON FUNZIONA

di il
21 risposte

21 Risposte - Pagina 2

  • Re: Funzione Conteggio +1 NON FUNZIONA

    Dichiarare il campo come auto incrementante?

    Una query con max(campo)?

    Se sei al record id=3 e dici di incrementare di 1 ma hai 300 record c'è un errore di base.

    O apri una tabella col solo campo in questione ordinata decrescente, ti posizioni al primo record, leggi il valore e aggiungi l'unità…

    O lanci una sql con max(campo)+1 as ultimonumero e assegni il valore di ultimonumero.

    14 risposte che ruotano attorno alla medesima soluzione e ancora nulla?

  • Re: Funzione Conteggio +1 NON FUNZIONA

    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.

    Senti una cosa, siccome devo lasciare un attimo, ti lascio ciò che devi fare, è molto semplice:

    1. Nel VBA se non hai già un Modulo allora ne crei uno
    2. Nel Modulo inserisci questa funzione (fai il copia e incolla)
    3. Nella Form sostituisci  =Conteggio ([CodiceProdotto])+1    con    = MyGetFirstFreeCode('tuaTabella'; 'CodiceProdotto')
      1. Sostituisci ‘tuaTabella’ con il nome effettivo della Tabella che hai nel tuo Db 

    Fatto... non devi fare altro e avrai sempre con certezza il primo codice libero

    Questa è una possibile soluzione che di gran lunga sostituisce assai meglio il Conteggio che avevi realizzato


    Nel Modulo VBA inserisci la funzione, basta che fai un copia incolla, non la devi modificare in quanto è parametrizzata :

    Option Compare Database
    Option Explicit
    _________________________________________________________________________________________________________________
    
    ' 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

    Quindi ogni volta che richiamerai questa funzione, passando il parametro nome della tabella e nome della colonna dove eseguire il calcolo, ti restituirà sempre, nel tuo caso, il primo “codice articolo” libero.


    N.B. 
    Come ti avevo già anticipato, questa funzione la puoi richiamare in più contesti diversi… nelle Form, nei Report, nelle Query, da Codice VBA, etc etc etc … vedi gli esempi che ti avevo esposto nel post precedente.

  • Re: Funzione Conteggio +1 NON FUNZIONA

    By65Franco, sto cercando di “calare” la tua proposta alla mia esigenza, tuttavia ho delle difficoltà; potresti darmi una dritta su dove devo inserire il nome del mio campo numerico da incrementare?

    premetto che a me serve inserire poi un campo su una maschera in un campo . 

    grazie

    07/10/2023 - By65Franco ha scritto:


    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

    19/10/2023 - Eolo ha scritto:


    By65Franco, sto cercando di “calare” la tua proposta alla mia esigenza, tuttavia ho delle difficoltà; potresti darmi una dritta su dove devo inserire il nome del mio campo numerico da incrementare?

    premetto che a me serve inserire poi un campo su una maschera in un campo .

    Segui le istruzioni che ti messo prima di questo post … è semplicissimo e velocissimo e non vai a toccare le strutture delle tabelle e di quello che hai già costruito nella form … devi solo copiare e incollare e sostituire la funzione = Conteggio con quello che ti ho descritto soprra 

  • Re: Funzione Conteggio +1 NON FUNZIONA

    19/10/2023 - Eolo ha scritto:


    premetto che a me serve inserire poi un campo su una maschera in un campo . 

    In merito a questo aspetto, come ti ho spiegato, la funzione MyGetFirstFreeCode la puoi richiamare in ogni contesto, quindi su una casella di testo, da codice vba , da query, insomma… dove e quando vuoi. Basta che gli passi il parametro nome della tabella e nome del campo dove eseguire il calcolo per determinare il primo codice libero.

  • Re: Funzione Conteggio +1 NON FUNZIONA

    Allora vediamo se ho capito giusto:

    il un Modulo nuovo scrivo

    ' 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

    qui dove scrivo nome tabella e nome colonna?

    poi richiamo  MyGetFirstFreeCode()  in una casella di testo direttamente sulla Maschera?

    Grazie

  • Re: Funzione Conteggio +1 NON FUNZIONA

    Ricordo a tutti che in questo forum si discute con cordialità e rispetto di tutti i partecipanti. Non c'è bisogno di scaldarsi o attaccarsi a vicenda, per quello esistono purtroppo i moderni social.

    Chiudo questa discussione per evitare che degeneri ulteriormente.

    Ho inoltre cancellato gli ultimi posts

Devi accedere o registrarti per scrivere nel forum
21 risposte