Как "заставить" счетчик начинать нумеровать с произвольного номера и с произвольным инкрементомИсточник: Accessboom Андрей Митин
Иногда необходимо изменить начальный номер счетчика с которого начинается автоматический отсчет. Просто так в 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") rs.AddNew rs![ID] = lNum rs.Update Ex_: Exit Function Err_: Resume Ex_ End Function Учтите только, что если Вы введете число меньше, чем значение счетчика в данный момент, запись добавится, но нумерация все равно будет идти по принципу: максимальное число + 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) участвует в одной или нескольких связях. С другой стороны, что стоит удалить связь, выполнить запрос на изменение счетчика и заново создать связь.... |