Вниз
Скачать: 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.023 c
3-1083242996
BPK
2004-04-29 16:49
2004.05.23
Сложный динамический SQL-запрос


14-1083784211
lenny wolf
2004-05-05 23:10
2004.05.23
Помогите!


1-1083865549
MAXHO-1
2004-05-06 21:45
2004.05.23
Как можно сделать следующее:


8-1074694574
alexey2004
2004-01-21 17:16
2004.05.23
OpenGL или DirectX?


14-1083735510
syte_ser78
2004-05-05 09:38
2004.05.23
Скоро ли появится LongHorn ?




   Наверх