![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Установка значения generator [D5, IB6.x]
stkatch © (2003-05-12 11:32:00)Уважаемые мастера!
Можно ли установить значение generatora в процедуре IB?
Установка "в лоб":
CREATE PROCEDURE SetGenerator
BEGIN
SET GENERATOR generator_1 TO 0;
END
не проходит :-(
stkatch (2003-05-12 12:55:00) [1]> Zacho
Спасиб!
Zacho (2003-05-12 12:40:00) [2]Смотри http://www.ibase.ru/devinfo/pslock.htmи http://www.ibase.ru/devinfo/ibtrans.htm
stkatch (2003-05-12 12:35:00) [3]А как в IB заблокировать таблицу на вставку данных?
Zacho (2003-05-12 12:31:00) [4]
> stkatch (12.05.03 12:25)
Элегантных - нет. Общий способ:
Работа с таблицей в "однопользовательском" режиме. (Т.е. блокирование модификации данных другими транзакциями до окончания создания документа)
Запрет изменения номеров в уже введенных документах.
Запрет удаления документов, или перерасчет номер после удаления.
stkatch (2003-05-12 12:25:00) [5]> Zacho
Да дырки это не очень приятно, и являются основной проблемой. А вообще есть какие нить элегантные способы вести возрастающую целочисленную уникальную нумерацию без пропусков?
Соловьев (2003-05-12 12:16:00) [6]
> А какие еще возможны варианты?
вычислять номер - не просто число, а например дата+время или еще чего-нибудь.
Zacho (2003-05-12 12:15:00) [7]
> stkatch (12.05.03 12:10)
Все зависит от того, как должна идти нумерация. В случае с генератором: пользователь вносит новый заказ. По каким-либо причинам транзакция откатывается. В результате получается "дырка" в нумерации заказов. Если такое устраивает - генераторы самое то.
stkatch (2003-05-12 12:10:00) [8]> Соловьев
Конечно для PK свой отдельный генератор. Суть в следущем. Есть список заказов у которых должно быть два идентификационных номера: глобальный (PK) и второй, в рамках смены. Когда смена закрывается счетчик должен обнуляться и в следущей смене опять начинаться с единицы. А какие еще возможны варианты?
Соловьев (2003-05-12 12:05:00) [9]
> Вообще мне нужен счетчик, который пользователь мог бы обнулить
> по своему желанию
жестоко ты со счетчиком... а он отвечает за PK? или просто так?
может для PK - пусть работает, а для юзера свой завести? что хоть за задача?
Zacho (2003-05-12 11:59:00) [10]
> stkatch (12.05.03 11:53)
Хорошенько подумай, не возникнет ли каких-либо коллизий при многопользовательской работе. И еще момент: в качестве счетчика генераторы мало подходят, т.к. откат транзакции никак не изменяет значение генератора. Хотя, может именно для твоей задачи и подойдет.
stkatch (2003-05-12 11:53:00) [11]> Zacho
Вообще мне нужен счетчик, который пользователь мог бы обнулить по своему желанию
Zacho (2003-05-12 11:42:00) [12]
> stkatch (12.05.03 11:32)
В Yaffil - можно и SET GENERATOR в ХП.
А ты уверен, что нужно ?
Генераторы работают вне контекста транзакций, поэтому при многопользовательской работе вполне можешь получить аномалии.
Johnmen (2003-05-12 11:40:00) [13]Конечно же GEN_ID ! :)))
Johnmen (2003-05-12 11:38:00) [14]CREATE PROCEDURE SetGenerator
DECLARE VARIABLE NG INTEGER;
BEGIN
NG=GenId(generator_1,-GenId(generator_1,0));
END