Главная страница
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.039 c
9-1073595642
Zak3D[@Tm]
2004-01-09 00:00
2004.05.23
Image перестал двигаться.


3-1083353267
Mishenka
2004-04-30 23:27
2004.05.23
FindKey


1-1083775237
Delphi5.01
2004-05-05 20:40
2004.05.23
... вместо override использовать virtual ...


4-1081251517
Dimitry
2004-04-06 15:38
2004.05.23
Запрет ввода некоторых символов в Edit


7-1081945141
ЁПРСТ
2004-04-14 16:19
2004.05.23
Как получить доступ к настройке панели управления?