Форум: "Базы";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизКак получить значение тригера при вставке(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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c