Dushman |
Отправлено: 15.02.2005, 22:49 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
как программно сделать автоинкримент для поля ID (Int)
Вариант с RecCount не подходит, т.к. возможно удаление любой записи из таблицы.
|
|
AVC |
Отправлено: 16.02.2005, 09:10 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Через дополнительную таблицу. |
|
telepath |
Отправлено: 16.02.2005, 10:36 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
А генератор не поможет? |
|
avc* |
Отправлено: 16.02.2005, 11:00 |
|
Не зарегистрирован
|
QUOTE | А генератор не поможет? |
В dbf? |
|
Dushman |
Отправлено: 16.02.2005, 12:04 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
а как сделать ч/з доп. таблицу? Там всё равно можно только взять кол-во строк, а если у меня например номера идут 1,3,4,5 то RowCount ,будет равен 4, если я сделаю +1, то 5, а 5 то у меня уже есть...
|
|
AVC |
Отправлено: 16.02.2005, 12:41 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Схемы:
Простой вариант ID = nvl(Max(ID),0) + 1
Сложный вариант
Эмулировать генератор.
Имеем таблицу типа GenName c20, LastUsedValue n8
И имеем функцию типа
int GenGetValue (str pgenname)
заблокировать таблицу (подумать о блокировке записи)
найти строку у которой GenName = pgenname
если нет {создать, записать в LastUsedValue 1, разблокировать таблицу, вернуть 1}
retvalue = LastUsedValue + 1;
записать в LastUsedValue retvalue
разблокировать таблицу
вернуть retvalue
Перед добавлением вызвать генератор.
|
|