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

Вниз

Удаление записей   Найти похожие ветки 

 
ruslanyd   (2002-11-20 15:05) [0]

Hi All!
существует ли в Interbase возможность, например, с помощью триггера вместо реального удаления записи просто прописывать дату удаления в нее?


 
oss ©   (2002-11-20 15:29) [1]

сделай признак - удаленная запись или нет,и вместо у даления проставляй этот признак, тогда и триггеров не надо будет


 
ruslanyd   (2002-11-20 15:35) [2]

так ниличие даты удаления и есть признак
просто мне с триггером (если это возможно) пришлось бы делать минимум изменений


 
Victor_Cr ©   (2002-11-20 15:48) [3]

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


 
stone ©   (2002-11-20 15:57) [4]

А тип БД какой?
В MS SQL, например, есть триггеры INSTEAD OF


 
Wolf226 ©   (2002-11-20 16:12) [5]

1. Cделай View (обязательно не живой!)
2. Пропиши тригерра BI, BU, BD
3. В BD и делай update поля по признаку.

пример (только здесь признак, а не дата)

CREATE VIEW V_RF_POST(
ID,
NAME,
PRIORITY)
AS
select
ID,
NAME,
priority
from
RF_POST,
rdb$database
where
deleted = 0;


SET TERM ^ ;

CREATE TRIGGER RF_POST_BD
as
begin
update rf_post set deleted = 1 where id = old.id;
end^

CREATE TRIGGER V_RF_POST_BI
as
begin
if (new.id is null) then new.id = gen_id(gen_id_rf_post, 1);
if (new.priority is null) then new.priority=gen_id(gen_priority_rf_post,1);
insert into rf_post (
id,
name,
priority
)
values (
new.id,
new.name,
new.priority
);

end^

CREATE TRIGGER V_RF_POST_BU
as
begin
update rf_post
set id = new.id,
name = new.name,
priority=new.priority
where id = old.id;
end^

SET TERM ; ^


 
ruslanyd   (2002-11-20 16:14) [6]

2 Victor_Cr
это все понятно, но проблема не в этом
проблема в том, чтобы устанавливать этот признак на уровне БД


 
Dr_Mike ©   (2002-11-20 16:53) [7]

А зачем на уровне БД ? Какое может быть практическое использование этого ?

Ведь если разобраться, то ИБ в действительности внутри себя поддерживает многоверсионность со сборкой мусора (если не ошибаюсь по умолчанию после 20 000 транзакций) - но зачем пытаться реализовать еще один подобный механизм ?

ИМХО, для критичных данных стоит вести лог - намного перспективнее.


 
ruslanyd   (2002-11-20 17:58) [8]

2 Wolf226
это похоже на то, что надо
но после срабатывания триггера RF_POST_BD запись все равно удаляется :(


 
ruslanyd   (2002-11-20 18:36) [9]

2 Dr_Mike
>А зачем на уровне БД

в большей степени для унификации
у меня есть поля с датой создания, модификации и удаления записи
дату создания и модификации сделал через триггеры
а удаления не получается, т.к. не знаю как отменить физическое удаление записи в триггере, если, конечно, такое возможно


 
Dr_Mike ©   (2002-11-21 00:52) [10]

в ИБ такие фичи на уровне БД не поддерживаются,
так что наиболее приемлемый вариант (чтобы не вносить изменения в уже готовый код) - это в тригере сохранение удаляемых записей в отдельную таблицу (или иногда бывает предпочтительно просто формировать общий лог)


 
ruslanyd   (2002-11-21 11:45) [11]

да, неутешительная инфа
дело в том, что у меня есть режим работы с базой без архивов и с ними, так что отдельные таблицы не подойдут

ладно, всем спасибо
буду курочить программу :)


 
ЮЮ ©   (2002-11-22 05:51) [12]

>так что отдельные таблицы не подойдут
а если её записывать в эту же таблицу снова, но с заполненным полем "Удалено", в триггере "вставить" анализировать это значение, дабы оставить то же значение ключа



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

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

Наверх




Память: 0.49 MB
Время: 0.02 c
1-28053
Сутковой Вадим
2002-11-27 16:33
2002.12.09
Раскладка клавы.


1-28060
DDF
2002-11-26 07:02
2002.12.09
Подскажите что делаю не так?


1-28079
ЮРИЙ_К
2002-11-27 15:57
2002.12.09
TreeView и свойство AutoExpand ???


1-27990
sniknik
2002-11-29 17:04
2002.12.09
Невидимая MDI форма.


1-28020
Checist [root]
2002-11-30 03:06
2002.12.09
Несколько элементов одного типа (ОЧЕНЬ НУЖНА ПОМОЩЬ)