Форум: "Начинающим";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];
ВнизВопрос по генераторам Найти похожие ветки
← →
Alpine (2006-05-25 13:55) [0]Доброго времени суток. Как программно установить текущее значение в генераторе ? Вобщем мне нужно, чтоб когда значение в генераторе доходило до 200, оно скидывалось опять на 0.
Заранее благодарен.
← →
Desdechado © (2006-05-25 13:58) [1]SET GENERATOR gen TO 0
← →
unknown © (2006-05-25 13:59) [2]IBSQL1.SQl.Text:="SET GENERATOR GEN_MY_ID TO 0";
IBSQL1.ExecQuery;
Это программно.
А автоматом можно и в хп/триггере :
if (Gen_id(gen_my_id,0)>=200) then
execute statement "SET GENERATOR GEN_MY_ID TO 0";
← →
Sergey13 © (2006-05-25 14:00) [3]2 Alpine (25.05.06 13:55)
Сдается мне - ты как то неправильно используешь генератор. 8-)
← →
Desdechado © (2006-05-25 14:02) [4]unknown © (25.05.06 13:59) [2]
коряво и не во всех версиях работает
сбрасывать прощеgen_id( genNAME, -gen_id( genNAME, 0 ) )
но что-то я склоняюсь к [3]
← →
Alpine (2006-05-25 14:26) [5]2 unknown
Вы не могли бы поподробнее, как сделать такой тригер ? Я вашим примером пользуюсь выдаёт ошибку.
Делаю так
if (gen_ord_schet(gen_ord_schet,0)>=200) then
execute statement "SET GENERATOR gen_ord_schet TO 0";
Этот тригер перед вставкой.
← →
Alpine (2006-05-25 14:28) [6]2 Desdechado
gen_id( genNAME, -gen_id( genNAME, 0 ) ) - Это триггер ?
Gen_id - это я как понимаю нужен ещё один триггер, а genName - это мой триггер. Правильно ?
← →
Sergey13 © (2006-05-25 14:39) [7]Gen_id - это функция.
ЗЫ: Я укрепляюсь в подозрении из [3]. 8-)
← →
unknown © (2006-05-25 14:40) [8]
> Alpine (25.05.06 14:26) [5]
В [4] более правильный вариант :)
> Alpine (25.05.06 14:28) [6]
Gen_id - это не триггер, это встроенная функция, с помощью которой
производятся манипуляции со значениями генераторов.
genName - тоже не триггер а имя генератора.
т.е д.б. :
if (gen_id(gen_ord_schet,0)>=200) then
gen_id( gen_ord_schet, -gen_id( gen_ord_schet, 0 ) );
← →
Alpine (2006-05-25 14:58) [9]2 unknown
Сделал триггер после вставки
if (gen_id(gen_ord_schet,0)>=200) then
gen_id( gen_ord_schet, -gen_id( gen_ord_schet, 0 ) );
Выдаёт ошибку
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, char -1.
gen_id.
Что делать ? (
← →
unknown © (2006-05-25 15:03) [10]
CREATE TRIGGER xxx FOR xxx
ACTIVE AFTER INSERT POSITION 0
AS
declare variable i integer;
begin
if (gen_id(gen_ord_schet,0)>=200) then
i=gen_id( gen_ord_schet, -gen_id( gen_ord_schet, 0 ) );
end
← →
Desdechado © (2006-05-25 15:27) [11]автор, природу таких махинаций не разъяснишь?
а то что-то веет душком от них нехорошим...
может, посоветуем более правильное решение
← →
Alpine (2006-05-25 15:33) [12]Вобщем в бухгалтерии есть такая фишка: бывают такие счета, у которых макс номер =200, а потом опять с 1 начинаются.
← →
Sergey13 © (2006-05-25 15:38) [13]2[12] Alpine (25.05.06 15:33)
Я не уверен все ли ты правильно понял в бухгалтерии. Что за счета такие? Балансовые? На оплату?
Номера документов лучше заполнять не генератором, а max()+1 или чем то таким. Генераторы - они в основном для кодов.
← →
Alpine (2006-05-25 15:46) [14]2 Sergey13
Я с тобой полностью согласен. Но наше дело малое, удовлитворить клиента )) Им так надо .. Им понравилось )) ...
← →
Sergey13 © (2006-05-25 15:51) [15]2 [14] Alpine (25.05.06 15:46)
Удовлеворяя клиента - помни, как бы он потом тебя не удовлетворил извращенным способом, когда выяснится, что вы друг друга не поняли. 8-)
← →
Alpine (2006-05-25 16:02) [16]2 Sergey13
Да вроде я им всё показал и всё нравится )) .. Ну живы будем не помрём ... Посмотрим )) ... ВСЕМ ОГРОМНОЕ СПАСИБО !
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c