Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];

Вниз

Установка значения generator   Найти похожие ветки 

 
stkatch   (2003-05-12 11:32) [0]

Уважаемые мастера!

Можно ли установить значение generatora в процедуре IB?
Установка "в лоб":

CREATE PROCEDURE SetGenerator
BEGIN
SET GENERATOR generator_1 TO 0;
END

не проходит :-(


 
Johnmen   (2003-05-12 11:38) [1]

CREATE PROCEDURE SetGenerator
DECLARE VARIABLE NG INTEGER;
BEGIN
NG=GenId(generator_1,-GenId(generator_1,0));
END


 
Johnmen   (2003-05-12 11:40) [2]

Конечно же GEN_ID ! :)))


 
Zacho   (2003-05-12 11:42) [3]


> stkatch (12.05.03 11:32)

В Yaffil - можно и SET GENERATOR в ХП.
А ты уверен, что нужно ?
Генераторы работают вне контекста транзакций, поэтому при многопользовательской работе вполне можешь получить аномалии.


 
stkatch   (2003-05-12 11:53) [4]

> Zacho
Вообще мне нужен счетчик, который пользователь мог бы обнулить по своему желанию


 
Zacho   (2003-05-12 11:59) [5]


> stkatch (12.05.03 11:53)

Хорошенько подумай, не возникнет ли каких-либо коллизий при многопользовательской работе. И еще момент: в качестве счетчика генераторы мало подходят, т.к. откат транзакции никак не изменяет значение генератора. Хотя, может именно для твоей задачи и подойдет.


 
Соловьев   (2003-05-12 12:05) [6]


> Вообще мне нужен счетчик, который пользователь мог бы обнулить
> по своему желанию

жестоко ты со счетчиком... а он отвечает за PK? или просто так?
может для PK - пусть работает, а для юзера свой завести? что хоть за задача?


 
stkatch   (2003-05-12 12:10) [7]

> Соловьев
Конечно для PK свой отдельный генератор. Суть в следущем. Есть список заказов у которых должно быть два идентификационных номера: глобальный (PK) и второй, в рамках смены. Когда смена закрывается счетчик должен обнуляться и в следущей смене опять начинаться с единицы. А какие еще возможны варианты?


 
Zacho   (2003-05-12 12:15) [8]


> stkatch (12.05.03 12:10)

Все зависит от того, как должна идти нумерация. В случае с генератором: пользователь вносит новый заказ. По каким-либо причинам транзакция откатывается. В результате получается "дырка" в нумерации заказов. Если такое устраивает - генераторы самое то.


 
Соловьев   (2003-05-12 12:16) [9]


> А какие еще возможны варианты?

вычислять номер - не просто число, а например дата+время или еще чего-нибудь.


 
stkatch   (2003-05-12 12:25) [10]

> Zacho
Да дырки это не очень приятно, и являются основной проблемой. А вообще есть какие нить элегантные способы вести возрастающую целочисленную уникальную нумерацию без пропусков?


 
Zacho   (2003-05-12 12:31) [11]


> stkatch (12.05.03 12:25)

Элегантных - нет. Общий способ:
Работа с таблицей в "однопользовательском" режиме. (Т.е. блокирование модификации данных другими транзакциями до окончания создания документа)
Запрет изменения номеров в уже введенных документах.
Запрет удаления документов, или перерасчет номер после удаления.


 
stkatch   (2003-05-12 12:35) [12]

А как в IB заблокировать таблицу на вставку данных?


 
Zacho   (2003-05-12 12:40) [13]

Смотри http://www.ibase.ru/devinfo/pslock.htm и http://www.ibase.ru/devinfo/ibtrans.htm


 
stkatch   (2003-05-12 12:55) [14]

> Zacho
Спасиб!



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
1-94934
Malamba
2003-05-08 09:32
2003.05.29
А как вычитать даты?


1-94878
Анат
2003-05-19 18:09
2003.05.29
Gif формат


14-95051
SPeller
2003-05-08 17:07
2003.05.29
Новый Дельфи-портал


3-94695
Анна
2003-05-06 19:51
2003.05.29
Запрос


4-95173
BJValentine
2003-04-01 16:34
2003.05.29
Запуск другой программы из своей.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский