Еще раз про autoincremental
Добавлено: 19 Декабрь 2005, 21:05
Все знают, что в кларе аутоинкрементал работает плохо и в принципе не может корректно работать в сетевых приложениях.Сейчас я лабаю большой проект под MYSQL и использую его родной аутоинкремент.В принципе все работает нормально, но при попытке получить идентификатор последней добавленной записи в кларе в среднем один раз из пяти возвращается 0 (хотя в родном мониторе MYSQL все работает нормально). По-видимому велосипедисты неспроста не включили MYSQL в число поддерживаемых СУБД(т.е. скорее всего не тестировали его ОДБС-драйвер).Мне все это надоело и я решил обойти эту проблему своими силами, взяв за основу идею MYSQL.
Вот решение: создаем файлик XXX без ключей из одной записи с одним полем N-ulong(файлик может быть clarion,tps и вообще любой).Далее примернр такой кусочек кода:
set(xxx);next(xxx)
if error()
xxx:n=1;add(xxx)
.
if ~error()
xxx:n=xxx:n+1;put(xxx)
.
yyy:id=xxx:n;add(yyy)
loop while errorcode()
set(xxx);next(xxx)
xxx:n=xxx:n+1;put(xxx)
yyy:id=xxx:n;add(yyy)
.
При этом ID -единственное поле праймери-ключа таблицы УУУ.
При удалении записей из УУУ файлик ХХХ не трогается.Т.е. нумерация идет нарастающим итогои. На несколько миллиардов записей хватит. Коллеги, Хотелось бы услышать Ваше мнение про такой приемчик.
Вот решение: создаем файлик XXX без ключей из одной записи с одним полем N-ulong(файлик может быть clarion,tps и вообще любой).Далее примернр такой кусочек кода:
set(xxx);next(xxx)
if error()
xxx:n=1;add(xxx)
.
if ~error()
xxx:n=xxx:n+1;put(xxx)
.
yyy:id=xxx:n;add(yyy)
loop while errorcode()
set(xxx);next(xxx)
xxx:n=xxx:n+1;put(xxx)
yyy:id=xxx:n;add(yyy)
.
При этом ID -единственное поле праймери-ключа таблицы УУУ.
При удалении записей из УУУ файлик ХХХ не трогается.Т.е. нумерация идет нарастающим итогои. На несколько миллиардов записей хватит. Коллеги, Хотелось бы услышать Ваше мнение про такой приемчик.