Форум: "Базы";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];
ВнизЗначение автоинкрементного поля Найти похожие ветки
← →
Marat111 (2003-05-22 15:25) [0]Необходимо определить следующее значение автоинкрементного поля до выполнения Вставки записи
← →
гончий (2003-05-22 15:31) [1]Хотя бы для приличия СУБД напиши.
← →
alex_bredin (2003-05-22 15:32) [2]select max(id)+1
← →
AlexAlex (2003-05-22 15:33) [3]Надежно-ниикак: можно попытаться спрогнозировать (select max(id)+1 from table), но в многопользовательской среде это будет не всегда работать правильно. Можно попытаться самому формировать значения из программы или через триггер, но тут пойдут дополнительные проблемы. Лучше всего попытаться обойтись без подобных предсказаний.
← →
WarLord (2003-05-22 15:55) [4]
> alex_bredin © (22.05.03 15:32)
> select max(id)+1
необязательно...может там кучу записей уже удалили
в СУБД с генераторами (напр Oracle) можно легко узнать, а например в парадоксе или MSSQL не узнаешь никак
← →
marat111 (2003-05-22 17:56) [5]через BDE связываюсь с Paradox
← →
Dred2k (2003-05-22 19:39) [6]Если для парадокса, то тебе по-любому нужен некий синхронизирующий ресурс. В этом плане может выступить либо таблица с последним использованным значением ключа, либо обычный текстовый файл с этим же значением. Таблица или файл при получении очередного значения блокируются (exclusive в обоих случаях). Более красивое решение, на мой взгляд, - локирование таблицы с ключом на время вставки новой записи (через TTable.LockTable(ltWrite)). В случае неуспеха - несколько повторов через разумный делэй, в крайнем случае - соответсвующее сообщение пользователю.
Разумеется, при этом есть вопросы. Но это реальный надежный вариант. Во многих серверах, конечно, проще..., но как говорится - "работать надо". ;)
← →
Dred2k (2003-05-22 19:41) [7]
> локирование таблицы с ключом
Точнее - "обновляемой таблицы".
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c