C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Автоинкримент для *.dbf
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 то у меня уже есть... sad.gif
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

Перед добавлением вызвать генератор.

Вернуться в Работа с базами данных в C++Builder