Poderá receber uma mensagem de erro quando tentar inserir um novo registo numa tabela que contém um campo numeração automática no Access

Número original da BDC: 884185

Sintomas

Quando tenta inserir um novo registo numa tabela com um campo Numeração Automática , poderá receber a seguinte mensagem de erro:

As alterações pedidas à tabela não foram bem-sucedidas porque iriam criar valores duplicados no índice, na chave primária ou na relação. Altere os dados no campo ou campos que contêm dados duplicados, remova o índice ou redefina o índice para permitir entradas duplicadas e tente novamente.

Captura de ecrã da mensagem de erro depois de inserir um novo registo numa tabela.

Nota

A tabela pode não ter relações ou índices.

Causa

Este problema ocorre quando o campo Numeração automática foi propagado incorretamente.

Resolução

Existem vários métodos que podem resolver este problema.

Método 1: Executar Compactação e Reparação

Para compactar a base de dados, siga estes passos:

  1. Inicie o Access.

  2. Abra a base de dados do Access.

    Nota

    Se vir a caixa de diálogo Aviso de Segurança, clique em Abrir.

  3. Clique no separador do friso Ferramentas da Base de Dados e, em seguida, clique em Compactar e Reparar Base de Dados no grupo Ferramentas.

    Nota

    As versões anteriores do Access podem ter a opção Compactar e Reparar a Base de Dados localizada noutro local. Veja a documentação da sua versão específica do Access para localizar esta opção.

Para repor manualmente a semente de campo Numeração Automática, utilize um dos seguintes métodos.

Método 2: Utilizar uma consulta de Definição de Dados

Abra a base de dados que tem a tabela (base de dados de back-end) no Access:

  1. No separador Criar , clique em Estrutura da Consulta no grupo Consultas .

  2. Na caixa de diálogo Mostrar Tabela , clique em Fechar.

  3. No separador Estrutura , clique em Vista SQL no grupo Resultados .

  4. Escreva o seguinte na janela Consulta1 :

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

    Nota

    <TableName> é um marcador de posição para o nome da <tabela. AutoNumFieldName> é um marcador de posição para o nome do campo Numeração Automática . iMaxID é um marcador de posição para o valor máximo atual no campo mais 1.

  5. No separador Estrutura , clique em Executar no grupo Resultados .

Método 3: Executar código Visual Basic for Applications

  1. No separador Criar , clique na seta para baixo em Macro e, em seguida, clique em Módulo.

  2. Cole o seguinte código no visual basic Revisor.

    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
    

    Nota

    O marcador <de posição AutonumberFieldName> representa o nome do campo Numeração Automática. O marcador <de posição TableName> representa o nome da tabela.

  3. No menu Executar, clique em Executar Sub/Formulário de Utilizador.

    Nota

    Tem de fechar a tabela antes de utilizar qualquer um dos métodos. Não tem de guardar a consulta ou o módulo depois de utilizar com êxito qualquer um dos métodos

Passos para reproduzir o comportamento

  1. Criar uma nova base de dados em branco

  2. Crie uma nova tabela denominada Tabela1 que contenha os dois campos seguintes:

    Campo1: Campo de Numeração Automática (Chave Primária) 2: Texto

  3. Adicione os seguintes seis registos à Tabela1.

    Campo1 Campo2
    1 A
    2 B
    3 C
    4 D
    5 E
    6 F
  4. Elimine o registo em que Field1 tem o valor 3.

  5. No separador Criar , clique em Estrutura da Consulta no grupo Consultas .

  6. Na caixa de diálogo Mostrar Tabela , clique em Fechar.

  7. No separador Estrutura , clique em Vista SQL no grupo Resultados .

  8. Escreva o seguinte na janela Consulta1 :

    INSERT INTO Table1 (Field1, Field2) SELECT 3 AS Field1, "C" AS Field2;
    
  9. No separador Estrutura , clique em Executar no grupo Resultados .

  10. Abra a Tabela1 e, em seguida, tente adicionar um novo registo. Recebe a mensagem de erro mencionada na secção "Sintomas".