Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновляемое представление и INSERT 
V
    Опции темы
Sansa
Дата 23.10.2007, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: нет
Всего: 6



Ничего не понимаю.
firebird 1.5

Есть таблица.... 
Код

CREATE TABLE COMPONENTS_TREE (
  ID INTEGER NOT NULL,
  CREATED DATE NOT NULL,
  CREATOR USER_NAME NOT NULL,
  MODIFED DATE,
  MODIFER USER_NAME,
  PARENT_ID INTEGER NOT NULL,
  CAPTION SHORT_NAME NOT NULL,
  NAME FULL_NAME NOT NULL,
  ELEMENT_TYPE SHORTINT NOT NULL,
  EXPLANATION EXPLANATION);


На BI повешен тригер, который заполняет данные при вставке значениями по умолчанию:
Код

CREATE TRIGGER BI_COMPONENTS_TREE FOR COMPONENTS_TREE
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
      NEW.ID = GEN_ID(COMPONENTS_TREE_ID_GEN, 1);
  IF (NEW.CREATED IS NULL) THEN
      NEW.CREATED = 'NOW';
  IF (NEW.CREATOR IS NULL) THEN
      NEW.CREATOR = USER;
END;


К этой таблице привешены 2 View (данные берут оба из нее, просто разные условия выбора и разные представления полей).
На каждый из них на BI повешен тригер для того, чтобы представление было обновляемым... Тригеры такого вида
Код

CREATE TRIGGER BI_VCOMPONENTS_TREE_DATA FOR VCOMPONENTS_TREE_DATA
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
  INSERT INTO COMPONENTS_TREE (CAPTION, NAME, EXPLANATION, ELEMENT_TYPE) VALUES (NEW.CAPTION, NEW.NAME, NEW.EXPLANATION, 1);
END;


Второй отличается только набором полей для вставки, и значениями по умолчанию. 

Так вот, при выполнении запроса к любой вьюшке, вида:
Код

   INSERT INTO VCOMPONENTS_TREE_DATA (CAPTION, NAME, EXPLANATION) VALUES ('test1', 'test1', 'great explanation');

данные в таблицу COMPONENTS_TREE заносятся, значения верные... НО почемуто всегда дважды за запрос. Т.е. каждый такой запрос добавляет 2 записи в таблицу... Запросы выполнялись как через ZeosDBO (Lazarus) так и через EMS Interbase manager lite. Результат одинаков.

Кто может прояснить ситуацию?
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
Deniz
Дата 23.10.2007, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Дополни описание DDL вьюшек, может там что?


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Bose
Дата 23.10.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: нет
Всего: 51



Цитата(Sansa @  23.10.2007,  14:03 Найти цитируемый пост)
Кто может прояснить ситуацию?

загадочно.

Может там что-нибудь сглюкануло? 
backup/restore не пробовали?
PM MAIL WWW Skype   Вверх
Sansa
Дата 23.10.2007, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: нет
Всего: 6



Bose, баз данных тестовая. Только что создал.

Deniz, вьюшки такого плана:
Код

CREATE VIEW VCOMPONENTS_TREE_DATA(
    ID,
    PARENT_ID,
    CAPTION,
    EXPLANATION)
AS
SELECT
  C.ID,
  C.PARENT_ID,
  C.CAPTION,
  C.EXPLANATION
FROM
  COMPONENTS_TREE C 
WHERE
  ELEMENT_TYPE = 1

и 
Код

CREATE VIEW VCOMPONENTS_ELEMENTS(
    ID,
    CAPTION,
    NAME,
    EXPLANATION)
AS
SELECT
  C.ID,
  C.CAPTION,
  C.NAME,
  C.EXPLANATION
FROM
  COMPONENTS_TREE C 
WHERE
  ELEMENT_TYPE = 0

На самом деле задумка гораздо сложнее, но после того как было замечено такое поведение, создал чистую базу с вот этой минимальной структурой. 
Пробовал перегружать комп - никаких изменений
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
Deniz
Дата 23.10.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Итак, первый пост:
Код

INSERT INTO VCOMPONENTS_TREE_DATA (CAPTION, NAME, EXPLANATION) VALUES ('test1', 'test1', 'great explanation');

и последний
Код

CREATE VIEW VCOMPONENTS_TREE_DATA(
    ID,
    PARENT_ID,
    CAPTION,
    EXPLANATION)
AS
SELECT
  C.ID,
  C.PARENT_ID,
  C.CAPTION,
  C.EXPLANATION
FROM
  COMPONENTS_TREE C 
WHERE
  ELEMENT_TYPE = 1

Что с набором полей? 
Слабо нормально написать, может мы у себя попробуем проверить?
Можно даже Backup сделать и сюда выложить, запросы типа insert into оформить в виде ХП.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Sansa
Дата 24.10.2007, 07:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: нет
Всего: 6



Прошу прощения за шум и гам. 
Дело было скорее всего в моей невнимательности. У меня на машине стоят 2 версии сервера 1.5 и 2 (перевожу потихоньку на вторую версию все программы). Я запускаю их попеременно. Так вот, скорее всего обе базы были созданы с использованием двойки, а пользовались с полторашкой. Отсюда и косяки (IMHO)

Вчера по просьбе Deniz, я решил подготовить всю информацию, и проверив, что запущена полторашка сделал экспорт метаданных с последующим импортом в новую базу. Косяк пропал.

При работе с проблемными базами косяки регулярно работают smile Вот бы такую надежность и устойчивость всем программам smile

Спасибо всем за участие.
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0440 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.