![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Доступ к значению генератора [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;