Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Как получить значение тригера при вставке(FireBird)   Найти похожие ветки 

 
Нуждающийся   (2004-04-29 07:03) [0]

FireBird 1.5
Пусть например есть таблица
CREATE TABLE NEW_TABLE (
ID INTEGER NOT NULL,
NAME VARCHAR(100)
);
/*с ключевым полем*/
ALTER TABLE NEW_TABLE ADD CONSTRAINT PK_NEW_TABLE PRIMARY KEY (ID);
/*ну и Генератор и тригер для ID*/
CREATE GENERATOR GEN_NEW_TABLE_ID;

CREATE TRIGGER NEW_TABLE_BI FOR NEW_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(GEN_NEW_TABLE_ID,1);
END

и Есть IBDataSet1:TIBDataSet к ентой таблице

Вопрос:
Как сделать чтоб после IBDataSet1.Insert-а в поле id передавались данные - результат отработки тригера.
А то так там пусто пока датасет не переоткроеш......???


 
Deniz ©   (2004-04-29 07:29) [1]

Есть у IBDataSet"а такое св-во GeneratorField посмотри.


 
Нуждающийся   (2004-04-29 08:24) [2]

Смотрел - кака это, а если сразу двое пользователей добавляют записи одновременно то ID-шки у них получатся одинаковые..... а это не есть хорошо


 
guest_Dmitry   (2004-04-29 08:51) [3]

Сделать CommitRetaining транзакции и refresh датасета.


 
Evgeny V ©   (2004-04-29 09:19) [4]

Если вопрос со вставкой -добавлением записей то можно испльзовать GeneratorField как уже говорилось выше (cкорее у тебя не получилось по твоей ошибке) или в SQL для инсерта (INSERTSQL) использовать следующую конструкцию insert into table (id,.... ) values ( (SELECT GEN_ID(Generator, 1) FROM RDB$DATABASE),...... )


 
Нуждающийся   (2004-04-29 09:20) [5]

IBDataSet1.Refresh; ничего не дает...почему низнаю....
Можно конечтно IBDataSet1.Close;IBDataSet1.Open;, но при этом
1) Тратится все-таки время
2) и это для меня главное - активной становится другая запись, а старую(вставленную) потом как искать?? если поле NAME не уникальное???


 
guest_Dmitry   (2004-04-29 09:23) [6]

дай текст рефреша


 
Соловьев ©   (2004-04-29 09:36) [7]


> Смотрел - кака это, а если сразу двое пользователей добавляют
> записи одновременно то ID-шки у них получатся одинаковые.....
> а это не есть хорошо

Читай мат часть - генераторы работают вне контекста транзакции. А это значит, что если ты хоть один раз обратился к генератору
GEN_ID(xxx,1) - именно 1, то следующий за этим юзер получит уже другое значение. Так что заполняй свойство. Оно корректно работает.


 
Нуждающийся   (2004-04-29 09:58) [8]

Да, точно,все работат, запарился.. была у меня почемуто такая паскудная мысля что генератор 2 раза увеличится один раз на сервере в тригере, а второй в GeneratorField....... потому и ставил GEN_ID(xxx,0) .........
ВСЕМ ПАСИБА!!!!!!!!!



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.094 c
1-1083742334
AntonSh
2004-05-05 11:32
2004.05.23
Класс TList


3-1083241816
kaif
2004-04-29 16:30
2004.05.23
Шмрокое использование вложенного запроса в IN


9-1074002243
ZAROLF
2004-01-13 16:57
2004.05.23
GamePlay


7-1081964341
NEKTO
2004-04-14 21:39
2004.05.23
Процессы, потоки


14-1083579274
Undert
2004-05-03 14:14
2004.05.23
Services