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

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

Доступ к значению генератора [D6, IB6.x]


Jaxtor ©   (2003-03-06 15:20:00) 

Есть ли возможность доступа из приложения-клиента к значению генератора в InterBase 6.0?


Johnmen   (2003-03-11 11:03:00) [1]

>Desdechado © (11.03.03 10:52)

Никто не спорит ! А фантазирует...:)


Desdechado   (2003-03-11 10:52:00) [2]

2 Johnmen © (06.03.03 21:34)
настройки лучше все-таки в спецтаблице хранить, т.к. права на генератор не раздаются, а глобальные настройки требуют некоторых привилегий :)


Desdechado   (2003-03-10 16:37:00) [3]

вообще-то можно генератор выставить в MAXINT, а потом декрементировать GEN_ID(MY_GEN,-1)
это ж первичный ключ будет, его величина никого не интересует.
можно попробовать (сам не делал) и отрицательные значения этой функцией получать :)


Johnmen   (2003-03-06 21:34:00) [4]

>zacho © (06.03.03 18:20)

Если пофантазировать, то, например, хранить в генераторе некоторый изменяемый настроечный параметр...


zacho   (2003-03-06 18:20:00) [5]

А что бы не вводить в заблуждение новичков, стоило бы еще добавить, что для генерации первичного ключа использовать GEN_ID(MY_GEN,0) не стоит. Как минимум GEN_ID(MY_GEN, 1) :-)
Кстати, меня всегда интеросовало, а для каких реальных целей может потребоваться текущеезначение генератора ?


Sergey Masloff   (2003-03-06 16:56:00) [6]

Val ©
>уже разобрались :)
я в запарке невнимательно посмотрел на ответы.


Val   (2003-03-06 16:35:00) [7]

>Sergey Masloff (06.03.03 16:29)
уже разобрались :)


Sergey Masloff   (2003-03-06 16:29:00) [8]

Val © (06.03.03 16:06)
>.. from <любая таблица, имеющая одну запись>..
>проверил - RDB$GENERATORS имеет не одну запись.
Ну и получишь столько дерганий функции сколько записей в таблице.

hint таблица rdb$database ВСЕГДА имеет 1 запись.


Val   (2003-03-06 16:26:00) [9]

>Johnmen © (06.03.03 16:23)
согласен


Johnmen   (2003-03-06 16:23:00) [10]

>Val © (06.03.03 16:06)

Поэтому и distinct... И для наращивания не годится...:)
Лично я (что уже неоднократно в конфе приводил) сделал бы через ХП :
CREATE PROCEDURE CurrentValueOfMyGen RETURNS (currentvalue INT)
AS BEGIN
currentvalue=GEN_ID(MyGen,0);
END
Развязываемся от к.-л.таблиц...


Val   (2003-03-06 16:08:00) [11]

>Жук © (06.03.03 16:06)
у генераторов могут быть разные приращения, не обязательно 1.


Val   (2003-03-06 16:06:00) [12]

>Johnmen © (06.03.03 15:30)
.. from <любая таблица, имеющая одну запись>..
проверил - RDB$GENERATORS имеет не одну запись.


Жук   (2003-03-06 16:06:00) [13]

2 Johnmen © (06.03.03 16:04)
Если ЭТО - не следующее, то какое ?
2 Jaxtor © (06.03.03 15:20)
>Есть ли возможность доступа из приложения-клиента к значению >генератора в InterBase 6.0?
Есть ! :-)


Johnmen   (2003-03-06 16:04:00) [14]

>Жук © (06.03.03 15:59)

Нет, не следующее, а большее текущего на 1.
;)))))))))))))))))


Жук   (2003-03-06 15:59:00) [15]

select gen_id(<имя генератора>,1) from rdb$database - получить следующее значение.


Val   (2003-03-06 15:53:00) [16]

>Johnmen © (06.03.03 15:30)
м.б. пример не мой, из доки под рукой взял, признаюсь честно :)


Jaxtor   (2003-03-06 15:30:00) [17]

Ясненько, нужно мне углубленно читать документацию по INTERBASE...


Johnmen   (2003-03-06 15:30:00) [18]

>Val © (06.03.03 15:27)

Нет, это не смотрение системной таблицы :)

select gen_id(CUST_NO_GEN, 0) from <любая таблица, имеющая одну запись> (напр. rdb$database)


Val   (2003-03-06 15:27:00) [19]

да. как минимум, можно посмотреть текущее значение из системной таблицы:
select distinct gen_id(CUST_NO_GEN, 0) from RDB$GENERATORS;


Наверх

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