È possibile che venga visualizzato un messaggio di errore quando si tenta di inserire un nuovo record in una tabella contenente un campo Numerazione automatica in Access

Numero KB originale: 884185

Sintomi

Quando si tenta di inserire un nuovo record in una tabella con un campo Numerazione automatica , è possibile che venga visualizzato il messaggio di errore seguente:

Le modifiche richieste alla tabella non sono riuscite perché creano valori duplicati nell'indice, nella chiave primaria o nella relazione. Modificare i dati nel campo o nei campi che contengono dati duplicati, rimuovere l'indice o ridefinire l'indice per consentire voci duplicate e riprovare.

Screenshot del messaggio di errore dopo l'inserimento di un nuovo record in una tabella.

Annotazioni

La tabella potrebbe non avere relazioni o indici.

Motivo

Questo problema si verifica quando il campo Numerazione automatica è stato inizializzato in modo errato.

Risoluzione

Esistono più metodi che possono risolvere questo problema.

Metodo 1: Eseguire la compatta e la riparazione

Per compattare il database, seguire questa procedura:

  1. Avviare Access.

  2. Aprire il database di Access.

    Annotazioni

    Se viene visualizzata la finestra di dialogo Avviso di sicurezza, fare clic su Apri.

  3. Fare clic sulla scheda della barra multifunzione Strumenti di database e quindi su Compatta e ripristina database dal gruppo Strumenti.

    Annotazioni

    Le versioni precedenti di Access possono avere l'opzione Compact and Repair Database disponibile altrove. Per individuare questa opzione, vedere la documentazione relativa alla versione specifica di Access.

Per reimpostare manualmente il seme del campo Autonumber, utilizzare uno dei metodi seguenti.

Metodo 2: Usare una query di definizione dei dati

Aprire il database che contiene la tabella (database back-end) in Access:

  1. Nella scheda Crea, nel gruppo Query, fai clic su Progettazione Query.

  2. Nella finestra di dialogo Mostra tabella fare clic su Chiudi.

  3. Nella scheda Progettazione fare clic su Vista SQL nel gruppo Risultati .

  4. Digitare quanto segue nella finestra Query1 :

    ALTER TABLE TableName ALTER COLUMN AutoNumFieldName COUNTER(iMaxID,1);
    

    Annotazioni

    <TableName> è un segnaposto per il nome della <tabella. AutoNumFieldName> è un segnaposto per il nome del campo Numerazione automatica . iMaxID è un segnaposto per il valore massimo corrente nel campo più 1.

  5. Nella scheda Progettazione fare clic su Esegui nel gruppo Risultati .

Metodo 3: Eseguire il codice di Visual Basic for Applications

  1. Nella scheda Crea fare clic sulla freccia giù in Macro e quindi su Modulo.

  2. Incollare il codice seguente in Visual Basic Editor.

    Sub ResetAuto()
      Dim iMaxID As Long
      Dim sqlFixID As String
      iMaxID = DMax("<AutonumberFieldName>", "<TableName>") + 1
      sqlFixID = "ALTER TABLE <TableName> ALTER COLUMN <AutonumberFieldName> COUNTER(" & <iMaxID> & ",1)"
      DoCmd.RunSQL sqlFixID
    End Sub
    

    Annotazioni

    Il segnaposto <AutonumberFieldName> rappresenta il nome del campo Numerazione automatica. Il segnaposto <TableName> rappresenta il nome della tabella.

  3. Fare clic su Esegui Sub/UserForm dal menu Esegui.

    Annotazioni

    È necessario chiudere la tabella prima di utilizzare uno dei due metodi. Non è necessario salvare la query o il modulo dopo aver usato correttamente uno dei metodi

Passaggi per riprodurre il comportamento

  1. Creare un nuovo database vuoto

  2. Creare una nuova tabella denominata Table1 contenente i due campi seguenti:

    Field1: Numerazione automatica (chiave primaria) Field2: Testo

  3. Aggiungere i sei record seguenti a Table1.

    Campo1 Campo2
    1 Un
    2 B
    3 C
    4 D
    5 E
    6 F
  4. Eliminare il record in cui Field1 ha il valore 3.

  5. Nella scheda Crea, nel gruppo Query, fai clic su Progettazione Query.

  6. Nella finestra di dialogo Mostra tabella fare clic su Chiudi.

  7. Nella scheda Progettazione fare clic su Vista SQL nel gruppo Risultati .

  8. Digitare quanto segue nella finestra Query1 :

    INSERT INTO Table1 (Field1, Field2) SELECT 3 AS Field1, "C" AS Field2;
    
  9. Nella scheda Progettazione fare clic su Esegui nel gruppo Risultati .

  10. Aprire Table1 e quindi provare ad aggiungere un nuovo record. Viene visualizzato il messaggio di errore menzionato nella sezione "Sintomi".