Текущий архив: 2003.07.17;
Скачать: CL | DM;
ВнизВопрос по генерации автоинкрементных полей Найти похожие ветки
← →
softmaster (2003-06-22 20:15) [0]Народ, всем привет!
Еще вопрос- есть поле НОМЕР ДОКУМЕНТА.
Для генерации его применяем генератор в базе.
к примеру, сгенерировали 35,36,37.
потом опять все номера удалили.
А генератор дальше генерирует 38 и т.д.
как сделать так, чтобы он генерировал снова эти значения
или ка можно еще сделать
?
Заранее благодарен.
← →
Fantasy (2003-06-23 05:39) [1]Интересный ворос !
Я думаю единственый выход такой.
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
i:= 0;
repeat
i:= i+1;
until not Table1.Locate("Nomer",i, [loPartialKey]);
Table1.Insert;
Table1["Nomer"]:=i;
/// Твои данные
Table1.Post;
end;
Я и демо написал качай с http://seda.kuzbass.com/Demo.zip
Дельфи 7
что скажите есть другой выход ??
← →
Fantasy (2003-06-23 05:49) [2]или
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
i:= 1;
while Table1.Locate("Nomer",i, [loPartialKey]) do i:= i+1;
Table1.Insert;
Table1["Nomer"]:=i;
/// Твои данные
Table1.Post;
end;
← →
Fantasy (2003-06-23 06:58) [3]это все прямым перебором!
И вобше могу доказать что за 20 запросов к базе данных могу найти первую не сушествуюшю цифру из(2^20) 1 048 576 записей
правдо не помю чей это алгоритм
(помоему алгоритм последователного приближения)
← →
Rol (2003-06-23 07:44) [4]>Fantasy
Сдаётся мне, что на этот генератор в базе есть триггер. Тогда, соответственно, и решение реализуется в этом же триггере элементарно.
← →
Johnmen (2003-06-23 09:45) [5]>...или ка можно еще сделать?
Просто сбросить значение генератора...
← →
Zacho (2003-06-23 10:16) [6]Если нужна генерация номеров без пропусков, то единственный способ - для получения номера сделать SELECT MAX(номер)+1 в транзакции SNAPSHOT TABLE STABILITY с явным резервированием таблицы protected write. А генератор для этого не подходит. Если же пропуски в нумерации допустимы, и нужно просто начать нумерацию с начало, то Johnmen © (23.06.03 09:45)
← →
softmaster (2003-06-23 12:21) [7]Ребята , всем спасибо
Все таки я склоняюсь к мысли насчет SELECT MAX...
← →
Zacho (2003-06-23 12:30) [8]
> softmaster © (23.06.03 12:21)
Тогда обрати внимание на несколько моментов:
1. Получение номера и вставка документа в БД должно быть в отдельной короткой транзакции, запускаемой непосредственно после окончания редактирования документа.
2. Транзакция должна быть wait с уровнем изоляции SNAPSHOT TABLE STABILITY с явным резервированием болокируемой таблицы. Т.е параметры транзакци должны быть такими:
wait
consistency
lock_write=<имя таблицы>
exclusive
Страницы: 1 вся ветка
Текущий архив: 2003.07.17;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.012 c