Как
"заставить" счетчик начинать
нумеровать с произвольного номера и с
произвольным инкрементом
Иногда
необходимо изменить начальный номер
счетчика с которого начинается
автоматический отсчет. Просто так в 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) участвует в одной или
нескольких связях. С другой стороны, что
стоит удалить связь, выполнить запрос на
изменение счетчика и заново создать связь....
Автор:
Андрей Митин, Dev Ashish
проверено
и дополнено rafa.