Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обновление VIEW [D5, FireBird 1.5.1]


Виталий Панасенко ©   (2004-09-07 18:18:00) 

Можно-ли (и если да, то как) обновить такую вьюху:

create view docview as
select  
 doc_id,
 doc_type_id,
 doc_date,
 doc_num,
 client_id,
 doc_sum
from documents d, globsets g
where extract(month from D.doc_date)=g.org_mperiod and
extract (year from d.doc_date)=g.org_yperiod ;

Использую для доступа FIBPlus


Zacho   (2004-09-08 10:19:00) [1]

Ну вот простейший пример. DISTINCT там нужен только для того, чтобы view стало not updatable.
Кстати, IBExpert сам может создавать триггера для view

/* View: VW_BANK */
CREATE VIEW VW_BANK(
   BIK_BANK,
   NAME_BANK,
   SHORT_NAME_BANK,
   CLASSIF_BANK,
   COMMENT_BANK)
AS
select distinct
   BIK_BANK,
   NAME_BANK,
   SHORT_NAME_BANK,
   CLASSIF_BANK,
   COMMENT_BANK
from BANK;

/******************************************************************************/
/***                                Triggers                                ***/
/******************************************************************************/

SET TERM ^ ;

/* Trigger: VW_BANK_BD */
CREATE TRIGGER VW_BANK_BD FOR VW_BANK
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
 DELETE FROM BANK
 WHERE (BIK_BANK = OLD.BIK_BANK);
END
^

/* Trigger: VW_BANK_BI */
CREATE TRIGGER VW_BANK_BI FOR VW_BANK
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
 INSERT INTO BANK (
   BIK_BANK,
   NAME_BANK,
   SHORT_NAME_BANK,
   CLASSIF_BANK,
   COMMENT_BANK)
 VALUES (
   NEW.BIK_BANK,
   NEW.NAME_BANK,
   NEW.SHORT_NAME_BANK,
   NEW.CLASSIF_BANK,
   NEW.COMMENT_BANK);
END
^

/* Trigger: VW_BANK_BU */
CREATE TRIGGER VW_BANK_BU FOR VW_BANK
ACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN
 UPDATE BANK
 SET BIK_BANK = NEW.BIK_BANK,
     NAME_BANK = NEW.NAME_BANK,
     SHORT_NAME_BANK = NEW.SHORT_NAME_BANK,
     CLASSIF_BANK = NEW.CLASSIF_BANK,
     COMMENT_BANK = NEW.COMMENT_BANK
 WHERE (BIK_BANK = OLD.BIK_BANK);
END
^

SET TERM ; ^


Виталий Панасенко   (2004-09-08 10:17:00) [2]

Только если честно, не совсем понятно (или совсем  не понятно :-) ))


Виталий Панасенко   (2004-09-08 10:09:00) [3]

Спасибо...


stud   (2004-09-08 10:02:00) [4]

триггеры создаются для представления, в них описываются действия которые происходят при соотв. запросах для представления


Zacho   (2004-09-08 09:52:00) [5]

Нужно написать триггера BEFORE INSERT (если хочешь чтобы можно было вставлять в VIEW), BEFORE UPDATE (если хочешь чтобы можно было делать UPDATE  VIEW), BEFORE DELETE (если хочешь чтобы можно было удалять из VIEW).
Простейший пример - немного позже, сейчас у меня под рукой похоже ничего такого нет.


Виталий Панасенко   (2004-09-08 09:32:00) [6]

Секундочку.. триггера ведь срабатывают до или после обновления таблицы ? или я ошибаюсь ? получается, нужно, в данном случае, иметь доступ к DOCUMENTS (это интересует).. Но там хранятся данные за весь период...можно (если есть) ссылку на пример самый элементарный ?..


Zacho   (2004-09-08 07:04:00) [7]

Можно любую. Для этого нужно создать соответствующие триггера для этого view.


Наверх

Титульная страница Поиск, карта сайта Написать письмо