Добавление данных в индексированную таблицу

Я пытаюсь добавить записи в таблицу, в которой есть данные, проиндексированные столбцом идентификатора. Я хотел бы, чтобы добавленные данные продолжали эту индексацию и прикрепляли следующий номер к первой добавленной записи и так далее. Однако этот столбец ID не является столбцом AutoNumber — первое число должно быть 5001, поэтому его текущий тип данных — «Число». Данные, уже находящиеся в этой таблице, вводятся через форму с этим VBA для форматирования столбца идентификатора:

    If Nz(Me.ID, "") = "" Then
    NewID = Int(DMax("ID", "tComplianceAll") + 1)
Else
    NewID = Me.ID
End If

В настоящее время у меня есть запрос на добавление, чтобы попытаться добавить новые данные в таблицу с этим SQL для этого столбца идентификатора: Int(DMax("ID","tComplianceAll")+1) AS Expr1

Однако это работает только для первой записи. Остальные не добавляются из-за ключевых нарушений, поскольку он пытается назначить один и тот же идентификационный номер для всех добавленных записей. Есть ли способ изменить этот SQL, чтобы он правильно индексировал вновь добавленные данные?


person Katie    schedule 05.07.2018    source источник
comment
Вы можете заполнить начальное значение поля автонумерации, и это, безусловно, самый простой способ решить вашу проблему, используя автонумерацию. Пока ваши текущие данные верны, я считаю, что вы все равно можете изменить тип данных.   -  person Minty    schedule 05.07.2018
comment
Другой вариант, если вы не хотите определять столбец автонумерации, состоит в том, чтобы написать немного кода VBA для добавления данных.   -  person Rene    schedule 06.07.2018


Ответы (1)


Вы, безусловно, можете использовать здесь стандартное значение идентификатора Autonumber!

  1. Отредактируйте таблицу tComplianceAll и измените тип столбца ID на AutoNumber.
  2. Затем установите следующее значение, используя этот SQL:

    ALTER TABLE tComplianceAll ALTER COLUMN ID AUTOINCREMENT(5001,1)
    

    На самом деле вы бы изменили 5001 на последнее значение, возвращаемое (DMax("ID", "tComplianceAll") + 1).

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

person kismert    schedule 09.07.2018