Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как установить значение генератора ? 
:(
    Опции темы
max-anikin
Дата 21.4.2005, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 23.11.2004

Репутация: нет
Всего: 1



Помогите начинающему ...

Необходимо написать процедурку которая восстановит правильное значение генератора. Написал что-то типа:
Код

SET TERM ^ ;

CREATE PROCEDURE NEW_PROCEDURE 
AS
DECLARE VARIABLE MAX_ID INTEGER;
begin
  select max(evnt.id) from tbl_events evnt into :max_id
  SET GENERATOR GEN_TBL_EVENTS_ID TO :max_id
  suspend;
end
^

SET TERM ; ^

выдает ошибку что не знает что такое SET. Что я неправильно написал ?? Как это сделать ??
PM MAIL ICQ   Вверх
max-anikin
Дата 21.4.2005, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 23.11.2004

Репутация: нет
Всего: 1



написал вот так
Код

SET TERM ^ ;

CREATE PROCEDURE STP_RESTORE_GEN_TBL_EVENTS 
AS
DECLARE VARIABLE CUR_ID INTEGER;
DECLARE VARIABLE MAX_ID INTEGER;
begin
  select max(evnt.id) from tbl_events evnt into :max_id;
  select GEN_ID(gen_tbl_events_id,0) from rdb$database into :cur_id;

  if(:cur_id < :max_id) then
      select GEN_ID(gen_tbl_events_id, :max_id - :cur_id + 1) from rdb$database into :cur_id;

  suspend;
end
^

SET TERM ; ^

но может кто нить подскажет более "красивое" решение smile
PM MAIL ICQ   Вверх
Golden Hands
Дата 22.4.2005, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Золотой
****


Профиль
Группа: Участник Клуба
Сообщений: 2023
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 3
Всего: 83



Обязательно программно это надо сделать?

Это сообщение отредактировал(а) Golden Hands - 22.4.2005, 00:17


--------------------
Мы обречены... но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло... © Тень Света
PM MAIL ICQ   Вверх
max-anikin
Дата 22.4.2005, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 23.11.2004

Репутация: нет
Всего: 1



Ага ... ваще это как бы скриптом надо даже ... я в скрипте процедуру это создаю ... выполняю и грохаю потом ... плохо ... но работает. Можно это сделать не создавая никакой процедуры ??
PM MAIL ICQ   Вверх
SergeBS
Дата 14.6.2005, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: нет
Всего: 22



max-anikin

select GEN_ID(gen_tbl_events_id,0)

Делай раз: читаешь текущее значение. Это уже есть.
Делай два: делаешь инкремент текущего значения, например оно 100, на -100. (минус 100). Получишь 0.
Дальше объяснять? smile
PM MAIL   Вверх
TheCetus
Дата 18.5.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: нет
Всего: 2



а если между выполнением операторов
select (...,0) into :gen_id
select(...,-:gen_id)
другой пользователь вызовет
select GEN_ID(gen_tbl_enets_id, n) где n>0 ? 
PM MAIL   Вверх
vv3
Дата 18.5.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 29.4.2006

Репутация: нет
Всего: нет



Так, что ли, нужно?
Прочитать максимальное значение поля из таблицы и привести к нему генератор?
Код

CREATE PROCEDURE STP_RESTORE_GEN_TBL_EVENTS 
AS
DECLARE VARIABLE CUR_ID INTEGER;
begin
  select max(evnt.id) from tbl_events evnt into :CUR_id;
  EXECUTE STATEMENT 'SET GENERATOR gen_tbl_events_id TO ' || :CUR_id;
end
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.