Maschera con campo numerazione progressiva

Anonimo
2018-01-06T15:23:16+00:00

Buon giorno e buone feste,

ho una maschera collegata a una tabella. lo scopo di questa maschera è quello di inserire nuovi record. Di solito inserisco anche cinquanta record alla volta, quindi sarebbe veramente utile che un campo di questa maschera (campo "numero") aumentasse di 1 il suo valore ogni volta che inserisco un nuovo record. Faccio un esempio, inserisco un record tramite tale maschera e assegno al campo "numero" il valore 1. qaundo premo il pulsante per inserire un nuovo record vorrei che, oltre ad azzerarsi tutti i campi della maschera, al campo "numero" comparisse il valore 2 e così via...

PS: il campo omologo nella tabella collegata alla maschera non deve avere la numerazione progressiva ma deve restare di tipo numerico; inoltre tale campo non è chiave primaria.

Mi va bene risolvere il tutto anche tramite vba, infatti ho già provato così (txtnumero è il campo che chiamo "numero"):

Private Sub txtnumero_AfterUpdate()

Me!txtnumero.DefaultValue = Me!txtnumero + 1

End Sub

Questo codice mi consente di fare ciò che chiedo ... ma solo una volta! Cioè, dopo il primo record che ho inserito mi compare il valore 2 al secondo record che inserisco, ma dopo il secondo, al terzo... resta il numero 2!

è chiaro che non sia riuscito nell'intento...

Grazie per l'ascolto e buone feste !

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2018-01-07T10:21:17+00:00

ciao Alessandro,

Ho risolto sostituendo DMax con DLast

Grazie mille !!!!!

leggi qui :

https://support.microsoft.com/it-it/help/208190/acc2000-first-and-last-functions-return-unexpected-records

https://support.office.com/it-it/article/Funzioni-DFirst-e-DLast-adb06169-bf49-4f80-bf04-1e4b5a48a8a7

ti sconsiglio Dlast.

in pratica hai una partizione che deve discriminare la numerazione progressiva data dalla data di inserimento della riga  nella tabella.

Prova ad effettuare questa modifica.

apri la tabella T_progressivo ed inserisci un nuovo campo lo chiami dataInserimento di tipo data/ora.

Apri la form ed inserisci un nuovo controllo textBox associato alla dataInserimento, questo controllo di compilerà automaticamente assumendo il valore della data odierna, lo puoi anche manterene non visibile, modificando la sua proprietà visibile=no.

Poi intervieni in modo minimale al codice VBA associato alla form nel modo che segue :

Private Sub Form_BeforeInsert(Cancel As Integer)

With Me

    .progressivo = Nz(DMax("progressivo", "T_progressivo", "datainserimento=" & CLng(VBA.Date())), 0) + 1

    .dataInserimento = VBA.Date()

End With

End Sub

sostanzialemente trovi il massimo valore nella tabella con considizione where settando il terzo parametro della funzione sui domini Dmax impostata sulla data odierna.

in tal modo, popolando la tabella con la form ottieni la corretta valorizzazione della partizione in base alla data odierna :

nota il rettandolo rosso, qualora di dimenticassi in inserire una riga per una data specifica, la progressione viene mantenuta.

un'altra soluzione potrebbe essere di utilizzare un database separato in cui memorizzare in una tabella il progressivo...ma per ora restiamo sul semplice...

HTH.

Ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2018-01-06T19:14:21+00:00

ciao Alessandro,

scarica questa demo.

apri la form M_progressivo e inserisci una data nel controllo data, il controllo progressivo si popolerà di 1 in 1 ( maschera a visualizzazione maschere continue) lo stesso per la M_progressivo1 maschera a visualizzazione maschere singole-

Facci sapere.

Ciao, Sandro.

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-01-06T17:57:46+00:00

    ciao Alessandro,

    cosa vuol dire non funziona? non è una risposta....da me funzione per bene, ho testato prima di suggerirti la possibile soluzione.

    Hai personalizzato il codice nel tuo scenario adattando nomi di campi e controlli....?

    se a visualizzazione singola allora inserisci questo :

    =Nz(DMax("progressivo";"T_progressivo");0)+1

    come valore predefinito del controllo che è adibito all'assegnazione del progressivo.

    Facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-01-06T17:36:38+00:00

    Grazie per la risposta !

    è a visualizzazione singola.

    Ho provato con il tuo codice ma non funziona, mi dispiace

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-01-06T17:15:20+00:00

    ciao Alessandro,

    la maschera è a visualizzazione maschere continue o singola?

    in attesa della tua risposta prova questa su evento before insert della tua form associata alla tabella.

    supponendo che la tabella si chiami t_progressivo ed il campo progressivo :

    Private Sub Form_BeforeInsert(Cancel As Integer)

    Me.progressivo = Nz(DMax("progressivo", "T_progressivo"), 0) + 1

    End Sub

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento