Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.02 c
1-1083916174
Zlodey
2004-05-07 11:49
2004.05.23
Проверка на существование MDI-Child


3-1082795753
Сказочник
2004-04-24 12:35
2004.05.23
Почему не работает count(*)


3-1083138302
MaD
2004-04-28 11:45
2004.05.23
Замена значений полей по условию при SQL-выборке


3-1082952973
WondeRu
2004-04-26 08:16
2004.05.23
BLOB


3-1083244166
Kibas
2004-04-29 17:09
2004.05.23
Обработка отвалившегося коннекта с БД




   Наверх