paradox
У меня есть поле аутоинкремент. так вот... я провожу n- операций, потом поочереди очищаю базу(
->Delete()). Затем провожу еще n- операций...Вопрос : поле аутоинк. начинает нумерацию не с 1, а с последнего числа удаленных операций. Почему, и как этого избежать ?
It's ALL.
1. Делаю это поле просто ИНТ, сохраняю, потом делаю опять автоинкремент - и все, инкремент опять с 0.
2. В некоторых программах можно устанавливать текущее значение инкремента, например Paradox9(среда разработки)
Просто так принято и это правильно.
Да так принято - НО иногда БД портятся и их нужно
подвергать Restructure, и если какие-либо записи были удалены - то (авто)нумерация всех последующих
сбивается...
Иногда я "перекатываю" записи из ремонтируемой БД в новую, анализируя при этом разрывы в нумерации,и
естесственно - корректирую их в новой БД - вот так:
//---------------------------------------------------------------------------
int __fastcall SetLastAutoInc(AnsiString dbName,int num)
{
int ret=0;
if(!FileExists(dbName)) ret=-1;
else { int fhand=FileOpen(dbName,fmOpenWrite|fmShareExclusive);//!!!
if( fhand<0) ret=-2;
else { if(FileSeek(fhand,0x49,0)<0) ret=-3;
else if(FileWrite(fhand,&num,4)<0) ret=-4;
FileClose(fhand);
}
}
return ret;
}
У меня есть поле аутоинкремент...
Привет через 20 лет :-)
То ли эта ошибка исправлена, а я не имею об этом информации, то ли она проявляется в каких-то особых случаях. К сожалению, у меня не осталось тестовой БД, на которой я отлаживал борьбу с этим глюком. Если у Вас сохранилась некая таблица, которая по прежнему глючит при реиндексации - перешлите пожалуйста на [email]mingaraev@yandex.ru[/email].
Заранее блогадарен.