Прочитать на английском

Поделиться через


При попытке вставить новую запись в таблицу, содержащую поле автонумера в Access, может появиться сообщение об ошибке.

Исходный номер базы знаний: 884185

Симптомы

При попытке вставить новую запись в таблицу с полем "Число" может появиться следующее сообщение об ошибке:

Изменения, которые вы запрашиваете для таблицы, не были внесены, так как они создают повторяющиеся значения в индексе, первичном ключе или связи. Измените данные в поле или полях, содержащих повторяющиеся данные, удалите индекс или переопределите индекс, чтобы разрешить повторяющиеся записи, и повторите попытку.

Снимок экрана: сообщение об ошибке после вставки новой записи в таблицу.

Примечание

Таблица может не иметь связей или индексов.

Причина

Эта проблема возникает при неправильном заполнении поля "Автонумер ".

Разрешение

Существует несколько методов, которые могут устранить эту проблему.

Способ 1. Сжатие и восстановление

Чтобы сжать базу данных, выполните следующие действия.

  1. Запустите Access.

  2. Откройте базу данных Access.

    Примечание

    Если появится диалоговое окно Предупреждение системы безопасности, нажмите кнопку Открыть.

  3. Перейдите на вкладку ленты Работа с базами данных, а затем выберите пункт Сжатие и восстановление базы данных в группе Сервис.

    Примечание

    В предыдущих версиях Access может быть параметр "Компактировать и восстановить базу данных" в другом месте. Чтобы найти этот параметр, ознакомьтесь с документацией по конкретной версии Access.

Чтобы вручную сбросить начальное значение поля автонумера , используйте один из следующих методов.

Способ 2. Использование запроса определения данных

Откройте базу данных с таблицей (серверной базой данных) в Access:

  1. На вкладке Создать щелкните Конструктор запросов в группе Запросы .

  2. В диалоговом окне Показать таблицу нажмите кнопку Закрыть.

  3. На вкладке Конструктор щелкните Представление SQL в группе Результаты .

  4. В окне Query1 введите следующее:

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

    Примечание

    <TableName> — это заполнитель для имени <таблицы. AutoNumFieldName> — это заполнитель для имени поля Autonumber . iMaxID — это заполнитель для текущего максимального значения в поле плюс 1.

  5. На вкладке Конструктор нажмите кнопку Выполнить в группе Результаты .

Метод 3. Выполнение кода Visual Basic для приложений

  1. На вкладке Создание щелкните стрелку вниз в разделе Макрос, а затем — Модуль.

  2. Вставьте следующий код в Редактор Visual Basic.

    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
    

    Примечание

    Заполнитель <AutonumberFieldName> представляет имя поля Autonumber. Заполнитель <TableName> представляет имя таблицы.

  3. В меню Выполнить выберите команду Выполнить подчиненную или пользовательную форму.

    Примечание

    Перед использованием любого из методов необходимо закрыть таблицу. Вам не нужно сохранять запрос или модуль после успешного использования любого из методов.

Действия по воспроизведению поведения

  1. Создание пустой базы данных

  2. Создайте таблицу с именем Table1 , содержащую следующие два поля:

    Поле1: автонумер (первичный ключ) Поле 2: Текст

  3. Добавьте следующие шесть записей в Table1.

    Поле1 Field2
    1 A
    2 Б
    3 В
    4 D
    5 E
    6 F
  4. Удалите запись, где Поле1 имеет значение 3.

  5. На вкладке Создать щелкните Конструктор запросов в группе Запросы .

  6. В диалоговом окне Показать таблицу нажмите кнопку Закрыть.

  7. На вкладке Конструктор щелкните Представление SQL в группе Результаты .

  8. В окне Query1 введите следующее:

    INSERT INTO Table1 (Field1, Field2) SELECT 3 AS Field1, "C" AS Field2;
    
  9. На вкладке Конструктор нажмите кнопку Выполнить в группе Результаты .

  10. Откройте Table1 и попробуйте добавить новую запись. Вы получите сообщение об ошибке, указанное в разделе "Симптомы".