Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Установка значения 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо