[Access] Problema incremento di un campo Id_contatore

Anonimo
2010-02-09T18:22:05+00:00

Ciaooo a tutti;

...in una applicazione mdb che gestisce un semplice protocollo  , ho una maschera che trae origine da una tabella dati, il cui numero di protocollo coincide con l'Id_contatore della tabella, che è anche chiave primaria e con duplicati non ammessi.

...In fase di inserimento,  il numero di protocollo naturalmente incrementa contestualmente con il campo Id_contatore.. fin qui tutto ok. Il problema sorge quando accidentalmente, o volutamente io elimino uno o più record finali, ad esempio gli ultimi due  record , aggiungendo un nuovo record l'id_contatore riprende ad incrementare naturalmente dall'ultimo record cancellato. Ho provato a compattare il database, ma nulla..!! Se ad esempio ho in archivio 40 records..ed elimino due records, quantunque io compatto il database , ed aggiungo un nuovo record , l'incremento riparte dal nr. 41 , anzichè dal nr. 39..!!

Spero di essere stato chiaro...!!

Altre volte Giorgio e Cinzia mi hanno aiutato, e comunque un grazie a chi altro potrà aiutarmi..

Francesco Laroccia

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
2010-02-10T23:30:05+00:00

Ciaoo Giorgio ...

... ho provato ad inserire il codice nell'evento BeforeInsert , e funziona bene..non ci sono problemi..!! ... ma io lo lascio nell'evento BeforeUpdate per due motivi : 1°) perkè avevo pensato anche io all'errore della chiave duplicata fra due utenti .. e 2°)..perkè anche io sono convinto che la sfortuna ci vede benissimo..!!....uahahahah

Ti ringrazio Giorgio per l'ennesimo codice che tu mi hai insegnato..!!

Dolce Notte....

Francesco Laroccia

La risposta è stata utile?

2 persone hanno trovato utile questa risposta.
0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2010-02-10T22:31:26+00:00

    Ciaooo Giorgio,

    sempre gentile e molto chiaro nelle tue risposte : ho provato sia quel codice del link dove tu mi hai indirizzato, e sia il codice dell'evento prima di aggiornare della maschera...!!... Ho lasciato il codice nell'evento prima di aggiornare,   e funziona bene, anche se si cancellano dei record.. l'incremento riprende sempre dall'ultimo numero inserito , solo che, naturalmente il numero progressivo io lo vedo solo dopo aver inserito tutti i campi e  salvato il record. Se io volessi vedere nella maschera  il numero progressivo prima di inserire tutti i campi, posso inserire lo stesso codice nell'evento Form_BeforeInsert..?? Potrei avere dei problemi in seguito.???

    Ti ringrazio di cuore

    Francesco Laroccia

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2010-02-09T21:31:14+00:00

    Ciao Francesco,

    no, non è l'operatore ad inserire il protocollo, ci pensa il codice messo nell'evento prima di aggiornare.

    Il codice da inserire è :

    Private Sub Form_BeforeUpdate(Cancel As Integer)

    If Me.NewRecord = True Then
       Me.ns\_protocollo = Nz(DMax("NomeCampo", "NomeTabella"), 0) + 1
    End If
    

    End Sub

    dove:

    ns_protocollo è il nome della casella testo che mostra il numero protocollo, cambialo se non si chiama così.

    NomeCampo è il nome del campo numerico che memorizza il protocollo, immagino sia sempre ns_protocollo , quindi cambialo.

    NomeTabella è il nome della tabella da cui leggere il Max del protocollo, dubito che la tabella si chiami nome_form quindi cambialo con il nome corretto.

    L'inserimento per mezzo dell'evento prima di aggiornare riduce di molto i problemi di concorrenza tra più utenti.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2010-02-09T21:00:43+00:00

    Ciaoo Giorgio ;

    ... ho dato un'occhiata sul link che tu mi ha indicato, ma sinceramente  (...sempre se non ho capito male..!)   il campo numerico che viene incrementato , non viene inserito in modo automatico, bensì è l'operatore che dovrebbe inserirlo.

    Invece io avevo pensato  di inserire nella tabella un campo numerico  , ad esempio ns_protocollo , e poi inserire nell'evento della maschera Form_BeforeInsert   il seguente codice :

    ns_protocollo = DCount("idprincipale", "nome_form", "idprincipale=" & idprincipale) + 1

    dove  ns_protocollo è il campo numerico della tabella, idprincipale il contatore della tabella che trae origine la maschera, e nome_form è il nome della maschera.

    Dimmi se faccio bene...grazie Giorgio..

    Francesco Laroccia

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2010-02-09T19:12:13+00:00

    Ciaooo a tutti;

    ...in una applicazione mdb che gestisce un semplice protocollo  , ho una maschera che trae origine da una tabella dati, il cui numero di protocollo coincide con l'Id_contatore della tabella, che è anche chiave primaria e con duplicati non ammessi.

    Ciao Franco,

    l'errore consiste nell'utilizzare il campo Id_Contatore come protocollo!

    Utilizza un campo numerico che non sia contatore e incrementalo ad ogni inserimento di un nuovo record tramite l'evento Prima di aggiornare della maschera.

    Vedi :

    contatore annuale

    http://social.microsoft.com/Forums/it-IT/accessit/thread/c250912c-2d67-4c01-a695-f16930a50939

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento