Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Автоинкримент + Inerbase, Помогите узнать значение вставляемого ID 
:(
    Опции темы
magnatua
Дата 27.10.2008, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня в таблице есть поле ID - автоинкримент, с помощью триггера и генератор получает значение.
Но значение заносится, только после метода ITable.Post;
А мне нужно узнать какое будет значение до поста :( Может кто-то сталкивался с такой проблемой? 
PM MAIL   Вверх
Akella
Дата 27.10.2008, 23:38 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Цитата(magnatua @  27.10.2008,  21:16 Найти цитируемый пост)
А мне нужно узнать какое будет значение до поста

используй генератор:

Код

a = GEN_ID(Gen_id_name, 0);

ключевой момент в том, что ты передаёшь ноль

PM MAIL   Вверх
magnatua
Дата 28.10.2008, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Akella, спасибо большое! Но как это мне сделать из Delphi? Использую стандартные компоненты InterBase.
Может вопросы мои не корректны или ламеркские, но я просто не знаю, где еще спросить!
PM MAIL   Вверх
Bose
Дата 28.10.2008, 03:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



Цитата(Akella @  27.10.2008,  23:38 Найти цитируемый пост)
ключевой момент в том, что ты передаёшь ноль

сначала подумал: отличная идея. 
но есть вероятность, что полученное значение окажется неверным. 
имхо, лучше так не делать.



Цитата(magnatua @  28.10.2008,  00:12 Найти цитируемый пост)
Использую стандартные компоненты InterBase.

У IBDataset-а - есть свойство GeneratorField. Там можно указать имя генератора и в какой момент получать значение:
OnPost - значение ID генерируется во время Post
OnNewRecord  - значение ID генерируется для каждой новой записи
Never(или OnServer) - IBDataset не будет дёргать генератор 


Цитата(magnatua @  27.10.2008,  21:16 Найти цитируемый пост)
А мне нужно узнать какое будет значение до поста 

Тебе нужен OnNewRecord.

п.с. пишу по памяти, так что могу ошибиться с названиями.
PM MAIL WWW Skype   Вверх
Deniz
Дата 28.10.2008, 06:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

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



Цитата(Bose @  28.10.2008,  06:19 Найти цитируемый пост)
имхо, лучше так не делать.
это не имхо, это горькая правда.
Если будут работать несколько клиентов, то значение генератора может измениться, причем вероятность такого растет в геометрической прогрессии при увеличении кол-ва пользователей и увеличении времени между insert и gen_id(..., 0)


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
magnatua
Дата 28.10.2008, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ребятки, спасибо большое! Вы очень и очень сильно помогли!

PM MAIL   Вверх
Akella
Дата 28.10.2008, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Цитата(Bose @  28.10.2008,  03:19 Найти цитируемый пост)
но есть вероятность, что полученное значение окажется неверным. 

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



Цитата(Bose @  28.10.2008,  03:19 Найти цитируемый пост)
OnPost - значение ID генерируется во время Post
OnNewRecord  - значение ID генерируется для каждой новой записи
Never(или OnServer) - IBDataset не будет дёргать генератор 

этого не нашёл

Это сообщение отредактировал(а) Akella - 28.10.2008, 21:21
PM MAIL   Вверх
Bose
Дата 28.10.2008, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



Цитата(Akella @  28.10.2008,  21:16 Найти цитируемый пост)
этого не нашёл


Писал по памяти, вот и напутал.

Вот как они на самом деле называются:

GeneratorField.ApplyEvent:TIBGeneratorApplyEvent
Цитата

Set TIBGeneratorApplyEvent to indicate when the server generates field values using this generator. ApplyEvent has one of the following values:

gamOnNewRecord    The dataset calls the server to generate the field value immediately after it inserts or appends a new record (before the OnNewRecord event). 
gamOnPost    The dataset calls the server to generate the field value immediately before it posts a record to the server (before the BeforePost event).
gamOnServer    


PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


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

1. Базы данных (Paradox, Oracle и т.п.)

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


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




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


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

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