How to restart counting from 1 after erasing table in MS Access?
How can I force the ID to restart with 1 , without having to drop the table and make new a new one?
6 Answers 6
In Access 2010 or newer, go to Database Tools and click Compact and Repair Database, and it will automatically reset the ID.
I hope you have no relationships that use this table, I hope it is empty, and I hope you understand that all you can (mostly) rely on an autonumber to be is unique. You can get gaps, jumps, very large or even negative numbers, depending on the circumstances. If your autonumber means something, you have a major problem waiting to happen.
In addition to all the concerns expressed about why you give a rat’s ass what the ID value is (all are correct that you shouldn’t), let me add this to the mix:
If you’ve deleted all the records from the table, compacting the database will reset the seed value back to its original value.
Access как обнулить счетчик в таблице
Как «заставить» счетчик начинать нумеровать с произвольного номера и с произвольным инкрементом
Иногда необходимо изменить начальный номер счетчика с которого начинается автоматический отсчет. Просто так в Access это сделать не удастся.
Для того, чтобы добиться этой цели, необходимо добавить в таблицу запись с нужным значением счетчика.
Редактировать поле «счетчик» можно разными путями — либо запросом на добавление, либо из кода VBA с помощью объекта Recordset.
Пример с использованием временной таблицы и запроса:
Допустим, у Вас есть таблица Table1, которая содержит поле счетчика ID, которое вы желаете стартовать с другого номера. Не вводите пока никаких записей в таблицу. Создайте, другую временную таблицу с одним полем типа Длинное целое, которое имеете тоже имя (в нашем случае ID), что и поле счетчика в первой таблице. Создайте запись во временной таблице, введя номер на единицу меньше того, с какого вы желаете стартовать счетчик в таблице Table1. Создайте запрос на добавление, чтобы добавить одну запись из второй таблицы в первую таблицу, и запустите его. Удалите вторую временную таблицу, удалите запись, которая появилась в таблице Table1 и начинайте вводить данные.
Пример с использованием запроса:
‘Есть таблица «Table1» с полем «ID» типа «счетчик»
PARAMETERS [Number] Long;
INSERT INTO Table1( [ID] )
Select [Number] As Expr1;
Создаете новый запрос, добавляете таблицу, выбираете режим SQL, вставляете эти строки и сохраняете запрос.
После выполнения запроса введите желаемое число и поле счетчик в таблице будет нумеровать именно с этого номера.
Пример с использованием VBA:
‘Есть таблица «Table1» с полем «ID» типа «счетчик»
Public Function AddNumer(lNum As Long) As Long
On Error GoTo Err_
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset(«Table1»)
Учтите только, что если Вы введете число меньше, чем значение счетчика в данный момент, запись добавится, но нумерация все равно будет идти по принципу: максимальное число + 1. Например, у Вас значение счетчика было 333, Вы добавляете запись со значением 222 — запись, конечно, добавится, но все равно счетчик будет продолжать нумеровать 334, 335, 336. т.е. максимальное значение в данном поле + 1.
После удаления всех записей из таблицы, поле счетчик не сбрасывается на единицу, а продолжает последовательно нумеровать и дальше. Поэтому необходимо после очистки таблицы сжать (compact) базу данных. Если из таблицы удалить не все записи, то после сжатия значение поля autonumber при добавлении будет равно максимальному — тому, что уже есть в таблице +1 (Если, конечно, свойство поля счетчик «New Values» установлено в «Increment»). Другой путь сбросить на единицу — удалить поле счетчика и создать его снова в таблице.
Можно использовать мощные инструкции SQL:
‘Есть таблица «Table1» с полем «ID» типа «счетчик»
ALTER TABLE Table1 ALTER COLUMN ID Counter(1,1)
Создаете новый запрос, добавляете таблицу, выбираете режим SQL, вставляете эти строки и сохраняете запрос.
Можно сказать, что это малодокументированная команда с широкими возможностями управления полем типа счетчик.
Команда позволяет задавать для таблицы начальный отсчет ( 1 ,1) и инкремент (1, 1 ). Можно задавать, например, начальный отсчет с 1000 с инкрементом в 10 . Counter(1000,10), причем никаких ограничений не накладывается — можно задавать значение меньшее, чем максимально присутствующее в этом поле, в отличие от примера с использованием запроса. Никаких процедур по сжатию базы для сброса счетчика не требуется. Понятно, что если будет пересечение, т.е. добавляемое значение счетчика уже присутствует в таблице, то механизм индексирования не даст ввести дублирующее значение и вывесит предупреждающее сообщение. Также нельзя таким способом изменить значение счетчика, если поле счетчика (в данному случае ID) участвует в одной или нескольких связях. С другой стороны, что стоит удалить связь, выполнить запрос на изменение счетчика и заново создать связь.
Как сбросить значения поля счетчика в базе Access (3 ПРОСТЫХ способа)
Для просмотра онлайн кликните на видео ⤵
Как сделать нумерацию строк в отчете Access Подробнее
Microsoft Access № 56: изменение поля счётчика Access Подробнее
КАК и ЗАЧЕМ использовать мастер подстановок в Microsoft Access Подробнее
Как связать таблицы в базе данных Microsoft Access 2016 Подробнее
Сортировка и группировка данных с итогами в отчетах Access Подробнее
Как создать макросы в Microsoft Access за 7 минут Подробнее
Первое знакомство с базами данных Microsoft Access Подробнее
Как создать главную кнопочную форму в Microsoft Access за 9 минут Подробнее
Как ЛЕГКО и БЫСТРО создать схему данных в Microsoft Access? Подробнее
Как создать запросы в Microsoft Access за 10 минут Подробнее
Автоматическое заполнение полей в базе Access Подробнее
Основные свойства полей таблицы Microsoft Access Подробнее
Microsoft Access № 14: сортировка и фильтрация при загрузке таблицы (формы) Access Подробнее
Как создать формы в Microsoft Access за 10 минут Подробнее
Как сделать формы в базе данных Microsoft Access 2016 (1 часть) Подробнее
Access. Таблицы. 2. Первичный ключ. Подстановки. Подробнее
Флажки и группа переключателей в базе данных Access Подробнее
Microsoft Access № 34: cумма в смешанном поле Access (числа и текст) Подробнее
Как создать таблицы в Microsoft Access за 8 минут Подробнее
Привет
Русскоязычный информационно-болтологический форум
как «обнулить» базу в Access’e?
как «обнулить» базу в Access’e?
Post by dima_ca » Wed Feb 09, 2005 7:16 am
Народ, я тут на досуге всё воюю с одним вебсаитом — перевожу его с XML на Access. В процессе отладки несколько раз обнулял базу «вручную», а потом просто добавил «delete table. » в скрипт, каздый раз перед запуском скрипт стирает все таблицы. И тут вдруг я заметил, что размер файла, пустой базы, 12M ! Другое неудобство — то чо Autonumbers продолжают расти с каждым прогоном.
Вопрос: как можно сделать экспорт структуры базы не экспортируя данных в Access’e (или может быть надо вообще как-то по другому это сделать?)
Re: как «обнулить» базу в Access’e?
Post by cityzen » Wed Feb 09, 2005 8:23 am
MSACCESS.EXE yourbase.mdb /compact
Post by Sergey___K » Wed Feb 09, 2005 8:28 am
Ничего не понял, кроме того, что нужно сделать Repair Compact database, чтобы autoincrenet’ить занова если таблица пустая.
А вообще, если только структуры таблиц:
File->Get External Data -> Import -> (select database, click «Import») -> Options >> -> «Import Tables» group -> Definitions Only
Re: как «обнулить» базу в Access’e?
Post by dima_ca » Wed Feb 09, 2005 8:28 am
MSACCESS.EXE yourbase.mdb /compact
Спасибо! Я сейчас попробовать это не могу, только вечером, поэтому ещё вопрос: индексы это тоже обнулит или нет?
Re: как «обнулить» базу в Access’e?
Post by cityzen » Wed Feb 09, 2005 8:36 am
MSACCESS.EXE yourbase.mdb /compact
Спасибо! Я сейчас попробовать это не могу, только вечером, поэтому ещё вопрос: индексы это тоже обнулит или нет?
Post by dima_ca » Wed Feb 09, 2005 9:00 am
Sergey___K wrote: Ничего не понял, кроме того, что нужно сделать Repair Compact database, чтобы autoincrenet’ить занова если таблица пустая.
А вообще, если только структуры таблиц:
File->Get External Data -> Import -> (select database, click «Import») -> Options >> -> «Import Tables» group -> Definitions Only
Post by Sergey___K » Wed Feb 09, 2005 10:54 am
Post by dima_ca » Wed Feb 09, 2005 4:59 pm
Post by Dimka69 » Wed Feb 09, 2005 5:44 pm
Sergey___K — а Вы IT? — просто интересно. Все IT-шники, которых я встречал люто ненавидят Ассess, в отличие от business people, которые находят его достаточно удобным и полезным и тихо с его помощью делают многие вещи.
Интересно, что в моей предыдущей компании главный IT (CIO) так люто ненавидел Access, что просто не давал нам работать и в буквальном смысле каждый день харассил нас тем, что IT Access просто уберет. Я там уже год не работаю, но по слухам с той стороны гор, IT до сих разрабатывает application, которое придет на смену Access в том процессе. Кажется даже до Беты еще не дошли.
В нынешней компании IT тоже не любит Access, разве что не грозятся убить процессы на корню, а «предлагают замену» (уж как полгода). Однако есть одна операция в процессе, которую мы можем сделать только в Ассеss что наше IT и предложило нам.
По этому от имени бизнес-people скажу, Во-первых, для меня Access удобен, в том числе и тем, что он работает как Client у SQL Server, и тем, что он входит в стандартный Office Professional. А во-вторых, to IT: «Ребята, я не возражаю, только дайте мне то, что мне нужно быстро и без объяснений плохой-хороший.» А то начинаются разговоры «правильно — не правильно». Мне работу делать нужно, а не философию разводить.
Мое предсказание, что Access here to stay и у каждого продукта своя цель и ниша.
Sorry for off-topiс above. По теме уже ответили.
Post by BezKovshaPrishel » Wed Feb 09, 2005 6:44 pm
Sergey___K — а Вы IT? — просто интересно. Все IT-шники, которых я встречал люто ненавидят Ассess, в отличие от business people, которые находят его достаточно удобным и полезным и тихо с его помощью делают многие вещи.
Интересно, что в моей предыдущей компании главный IT (CIO) так люто ненавидел Access, что просто не давал нам работать и в буквальном смысле каждый день харассил нас тем, что IT Access просто уберет. Я там уже год не работаю, но по слухам с той стороны гор, IT до сих разрабатывает application, которое придет на смену Access в том процессе. Кажется даже до Беты еще не дошли.
В нынешней компании IT тоже не любит Access, разве что не грозятся убить процессы на корню, а «предлагают замену» (уж как полгода). Однако есть одна операция в процессе, которую мы можем сделать только в Ассеss что наше IT и предложило нам.
По этому от имени бизнес-people скажу, Во-первых, для меня Access удобен, в том числе и тем, что он работает как Client у SQL Server, и тем, что он входит в стандартный Office Professional. А во-вторых, to IT: «Ребята, я не возражаю, только дайте мне то, что мне нужно быстро и без объяснений плохой-хороший.» А то начинаются разговоры «правильно — не правильно». Мне работу делать нужно, а не философию разводить.
Мое предсказание, что Access here to stay и у каждого продукта своя цель и ниша.
Sorry for off-topiс above. По теме уже ответили.
Как сбросить значения поля счетчика в базе Access (3 ПРОСТЫХ способа)
KOMMENTARE • 12
Спасибо за помощь.
Спасибо! Третьего способа не знал. Очень помогло.
В Access 2007 третий вариант (с восстановлением БД) не работает. Может из-за того, что таблица, где необходимо такое действие, имеет связи с другими таблицами?
А как сделать, чтобы счётчик начинал счёт записей таблицы не с 1, а с какого-то конкретного значения?!
Т.е. я хочу, чтобы в одной таблице в ключевом поле счётчик присваивал id 1000001, 1000002, 1000003. а в другой — 2000001, 2000002, 2000003.
Возможно ли это вообще?
@Уроки по Microsoft Access, уже попробовал, всё работает. Спасибо!)
Да запросом sql
@Уроки по Microsoft Access, не совсем понимаю как. Запрос SQL?
С помощью insert вставьте в таблицу первую запись, где будет 10001, далее при заполнении номера пойлут по порядку
А когда может потребоваться сброс первичного ключа?
Если запись не удачно удалили, и вам принципиальна правильная последовательность
можно ли на одном ноуте поставить и Microsoft Access 2003, и Microsoft Access 2016 так, чтобы они работали корректно.
Спасибо, ты ЛУЧШИЙ!
+Пётр Иванов спасибо, что смотрите
А что случается со связями, запросами и отчетами при первых 2х способах?? Я думаю это нужно было упомянуть в видео..
и присвоятся другие значения в связанных таблицах, не удаляйте ключевое поле если с ним есть связь. А если вам надо поле где цифры идут по порядку то создайте новое поле счетчик и задействуйте его в отчетах.
ничего. если есть связи, то поле вы не удалите. сначала надо будет убрать связь, пересоздать поле и потом вернуть связь.
Добрый день! Сделайте ролик, который показывает, как добавить на кнопку действие копировать в буфер обмена часть записи в ячейке.
Добавление и изменение первичного ключа таблицы в Access
Первичный ключ — это поле или набор полей со значениями, уникальными во всей таблице. Значения первичного ключа можно использовать для ссылки на любую запись, поскольку у каждой записи свое значение. В таблице может быть только один первичный ключ. Access может автоматически создавать поле первичного ключа при создании таблицы. Вы также можете самостоятельно указать поля, которые нужно использовать в качестве первичного ключа. В этой статье объясняется, как и зачем использовать первичные ключи.
Чтобы задать первичный ключ таблицы, откройте таблицу в режиме конструктора. Выберите нужное поле (или поля), а затем на ленте щелкните Ключевое поле.
Примечание: Эта статья относится только к классическим базам данных Access. В веб-приложениях Access и веб-базах данных первичный ключ для новых таблиц назначается автоматически. Несмотря на то что автоматические первичные ключи можно менять, делать это не рекомендуется.
В этой статье
Общие сведения о первичных ключах в Access
С помощью полей первичных ключей Access быстро связывает данные из нескольких таблиц и объединяет эти данные по заданному принципу. Поля первичного ключа можно использовать в других таблицах для ссылки на таблицу, являющуюся источником первичного ключа. В этих таблицах такие поля называются внешними ключами. Например, поле «ИД клиента» из таблицы «Клиенты» может также использоваться в таблице «Заказы». В таблице «Клиенты» оно будет первичным ключом, а в таблице «Заказы» — внешним. Проще говоря, внешний ключ — это первичный ключ другой таблицы. Дополнительные сведения см. в статье Основные сведения о создании баз данных.
1. Первичный ключ
При переносе существующих данных в базу данных в них уже может существовать поле, которое можно использовать как первичный ключ. Часто в роли первичного ключа таблицы выступает уникальный идентификационный номер, например порядковый или инвентарный номер или код. Например, в таблице «Клиенты» для каждого клиента может быть указан уникальный код клиента. Поле кода клиента является первичным ключом.
Для первичного ключа автоматически создается индекс, ускоряющий выполнение запросов и операций. Кроме того, приложение Access проверяет наличие и уникальность значений в поле первичного ключа.
При создании таблицы в режиме таблицы Access автоматически создает первичный ключ с именем «Код» и типом данных «Счетчик».
Создание приемлемого первичного ключа
Чтобы правильно выбрать первичный ключ, следует учитывать несколько характеристик.
Ключ должен однозначно определять каждую строку.
В нем не должно быть пустых или отсутствующих значений — он всегда содержит значение.
Ключ крайне редко изменяется (в идеале — никогда).
Если не удается определить приемлемый ключ, создайте для него поле с типом данных «Счетчик». Поле «Счетчик» заполняется автоматически созданными значениями при первом сохранении каждой записи. Таким образом, поле «Счетчик» соответствует всем трем характеристикам приемлемого первичного ключа. Дополнительные сведения о добавлении поля «Счетчик» см. в статье Добавление поля счетчика в качестве первичного ключа.

Поле с типом данных «Счетчик» является хорошим первичным ключом.
Примеры неудачных первичных ключей
Любое поле, не имеющее одной или нескольких характеристик подходящего первичного ключа, не следует выбирать в качестве первичного ключа. Ниже представлено несколько примеров полей, которые не годятся на роль первичного ключа в таблице «Контакты», и пояснения, почему их не следует использовать.
Сбросить идентификатор счетчика на 1 для каждого нового года в MS Access
У меня есть две таблицы, tblContacts и tblTrackJob . Каждый раз, когда в tblContacts , я хотел бы назначить его JobNo поле на значение любого ID В tblTrackJob сохранил. Я хотел бы, чтобы значение сбрасывалось на 1 каждый год.
Я немного смущен. Похоже, вы хотите, чтобы новым записям [tblContacts] присваивался последовательный [JobNo] в зависимости от года их создания (сбрасывается на 1 для каждого нового года), так как же [tblTrackJob].[ID] влияет на это? Пожалуйста, отредактируйте свой вопрос, чтобы уточнить. — Gord Thompson
@GordThompson Таблица «tblTrackJob» содержит счетчик для следующего «ID задания», который я вызову для заполнения поля «ID задания» в таблице «tblContracts». — Guillermo
Если [tblTrackJob] будет просто содержать один счетчик «NextID», который будет сбрасываться на 1 каждый новый год, вам не нужно делать это таким образом. Вы можете просто основывать следующее значение [JobNo] на MAX()+1 существующих значений [JobNo] в [tblContacts] для этого года. — Gord Thompson
1 ответы
Поскольку мы имеем дело с Access 2010, мы можем создать Before Change макрос данных для таблицы [tblContacts] присвоить значение [JobNo]:

Макрос найдет самый большой [JobNo] в таблице из записей с соответствующим Year([dateEntered]) , а затем добавьте к этому значению 1, чтобы получить [JobNo] для новой записи. Если для соответствующего года не найдено ни одной существующей записи, то новая запись получает [JobNo], равный 1.
ответ дан 29 апр.

Просто любопытно: зачем делать это с помощью макроса вместо VBA? В любом случае это интересно, так как я обнаружил, что эти «новые» макросы, кажется, обрабатывают переменные и, наконец, вполне читабельны. — iDevlop
@iDevlop Основное преимущество заключается в том, что макрос данных будет выполняться независимо от того, как обновляется таблица, поэтому, даже если пользователь откроет таблицу в режиме таблицы и добавит запись, макрос все равно будет выполняться. — Горд Томпсон
хорошо. соответствие триггерам SQL Server. Понятно. Спасибо ! Когда-нибудь мне обязательно придется это копать. — iDevlop
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками ms-access vba ms-access-2010 or задайте свой вопрос.
Как обнулить счетчик в access
Сделать, что бы при обновлении таблицы изменились значения без пересоздания формы
Обновил таблицу а в форме не поменялось как сделать что бы поменялось что бы не пересоздавать форму
Создание таблицы запросом + поле счетчика
Здравствуйте, Уважаемые форумчане! Задача: сделать некую ленточную форму, источником данных.