Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.25;
Скачать: [xml.tar.bz2];

Вниз

Обновляемое View   Найти похожие ветки 

 
kombat   (2002-11-07 18:28) [0]

Привет всем! Помогите в решении проблемы. Есть две таблички
TOWN (
REC_ID T_INT_NOT_NULL NOT NULL,
NAME T_VARCHAR_128 NOT NULL
и
BANK (
REC_ID T_INT_NOT_NULL NOT NULL,
NAME T_VARCHAR_64 NOT NULL,
MFO T_VARCHAR_6 NOT NULL,
TOWN_ID T_INT_NOT_NULL NOT NULL
на них создается
CREATE VIEW NEW_VIEW(
BANK_NAME,
BANK_REC_ID,
TOWN_NAME,
TOWN_REC_ID)
AS
SELECT B.NAME AS BANK_NAME, B.REC_ID, T.NAME AS TOWN_NAME, T.REC_ID AS TOWN_REC_ID
FROM TOWN T, BANK B
WHERE T.REC_ID=B.TOWN_ID;
у него есть тригер
ALTER TRIGGER NEW_VIEW_BI
AS
DECLARE VARIABLE TMPI_TOWN_REC_ID INTEGER;
BEGIN
SELECT REC_ID FROM TOWN WHERE NAME=NEW.TOWN_NAME INTO :TMPI_TOWN_REC_ID;
IF (TMPI_TOWN_REC_ID IS NULL) THEN TMPI_TOWN_REC_ID=0;
IF (TMPI_TOWN_REC_ID=0) THEN BEGIN
TMPI_TOWN_REC_ID=GEN_ID(GEN_TOWN_ID, 1);
INSERT INTO TOWN (REC_ID, NAME) VALUES (:TMPI_TOWN_REC_ID, NEW.TOWN_NAME);
END
TMPI_TOWN_REC_ID=0;
INSERT INTO BANK (NAME, TOWN_ID) VALUES (NEW.BANK_NAME, :TMPI_TOWN_REC_ID);
END
у табличек кроме того на ключевые поля есть тригеры которые подставляют значения для ключевого поля REC_ID.

А проблема в том что при попытке провести следующий запрос INSERT INTO NEW_VIEW (BANK_NAME, TOWN_NAME, BANK_REC_ID, TOWN_REC_ID)
VALUES ("New_bank", "Kiev", 0, 0) просто отваливается соединение к базе.
Как бороться с этим, что я делаю неправильно?


 
Kombat   (2002-11-07 18:53) [1]

И еще выдает такое
The cursor identified in the update or delete statement is not positioned on a row.
no current record for fetch operation.
attempted update of read-only column.

Как вообще сделать чтобы View был обновляемым, вроде делаю все как в доках FB


 
Johnmen   (2002-11-08 01:59) [2]

Еще раз внимательно прочитать доки на предмет определения редактируемого вью...
А по поводу отваливающегося соединения - так ты не указал, как это соединение осуществляешь ! А телепатов, как уже неоднократно заявлялось в конфах, здесь нет !


 
Виталий Панасенко   (2002-11-08 08:45) [3]

Просто обновляемый просмотр можно создать только используя ОДНУ таблицу


 
Wolf226   (2002-11-08 10:11) [4]

2 Виталий Панасенко.

Да хоть из 100 таблиц! Только тригера пропиши и все там обновляй.
Когда view из 1 таблицы тогда она сама обновляет, а иначе с помощью тригеров.

Кстати о птичках:
Если view из одной таблицы, а тебе нужно сделать встаку своим методом в тригере, то ты ее обманываешь так

select ID, name
from table1, rdb$database


 
Wolf226   (2002-11-08 10:29) [5]

Зачем? Вроде это вторичный ключ, а ты его в 0
TMPI_TOWN_REC_ID=0;
INSERT INTO BANK (NAME, TOWN_ID) VALUES (NEW.BANK_NAME, :TMPI_TOWN_REC_ID);


 
kombat   (2002-11-08 11:05) [6]

Извиняюсь за неполный вопрос. Я использовал для коннекта к БД IBExpert 2.5.0.9, при использовании SQLExplorer (BDE 5.11) конект так же отлетает. FireBird 1.0 build 863. В доках написано что обновляемое View можно сделать только на одну таблицу, но если использовать тригеры, то можно обновлять любое количество таблиц. Что я и делаю
CREATE TRIGGER NEW_VIEW_BI FOR NEW_VIEW
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE TMPI_TOWN_REC_ID INTEGER;
BEGIN
SELECT REC_ID FROM TOWN WHERE NAME=NEW.TOWN_NAME INTO :TMPI_TOWN_REC_ID;
IF (TMPI_TOWN_REC_ID IS NULL) THEN TMPI_TOWN_REC_ID=0;
IF (TMPI_TOWN_REC_ID=0) THEN BEGIN
TMPI_TOWN_REC_ID=GEN_ID(GEN_TOWN_ID, 1);
INSERT INTO TOWN (REC_ID, NAME) VALUES (:TMPI_TOWN_REC_ID, NEW.TOWN_NAME);
END
TMPI_TOWN_REC_ID=0;
INSERT INTO BANK (NAME, TOWN_ID) VALUES (NEW.BANK_NAME, :TMPI_TOWN_REC_ID);
END

Если уменьшить строку Insert передавая меньше параметров, то конект не отваливается, но все равно не работает

При попытке редактировать в IBExpert View как табличку при Post вылетает
Invalid Token
Dinamic SQL Error
SQL Error Code -104
Token unknown - line 2, char 2. ).
Но видно это ошибка самого IBExpert


 
kombat   (2002-11-08 11:07) [7]

to Wolf226 ©
там звучит так
IF (TMPI_TOWN_REC_ID=0) THEN BEGIN
TMPI_TOWN_REC_ID=GEN_ID(GEN_TOWN_ID, 1);
INSERT INTO TOWN (REC_ID, NAME) VALUES (:TMPI_TOWN_REC_ID, NEW.TOWN_NAME);
END
т.е. если нет записи в справочнике, то создаем её


 
kombat   (2002-11-08 11:11) [8]

А вообще, уважаемы Мастера, этот цирк затеивается чтобы перенести БД из Access в Firebird. Но в Firebird используется новая структура, мы переносим туда данные и создаем View которые эмулируют старую структуру где это возможно, а страые приложения Access видят эти View как свои старые таблицы и работают дальше (не все они еще переведены на Делфи). Это попытка осуществить плавный переход. Может конечно это делается и иначе, но я пока другого способа не вижу


 
Wolf226   (2002-11-08 11:54) [9]

Про МФО забыл? Оно же not null.


 
kombat   (2002-11-08 12:58) [10]

МФО нот нулл, но его домен сам подставляет " "


 
Wolf226   (2002-11-08 13:16) [11]

Мда...
у меня как-то был такой случай. Я создал процедуру, alter и отвалилось соединение.
Пришлось находить сбойный участок. Путем поочередного комментирования операторов. Но я нашел другой способ написать сбойный участок и стало все в порядке. Наверно баг самого сервера.



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

Форум: "Базы";
Текущий архив: 2002.11.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
3-82682
pavelsinicinV
2002-11-07 19:22
2002.11.25
Физический номер записи


1-82773
MixerPro
2002-11-14 15:07
2002.11.25
Надо определить параметры Рабочего Стола.


6-82896
TurburatoR
2002-09-25 13:00
2002.11.25
NMHTTP


3-82585
Rule
2002-11-08 01:18
2002.11.25
Помогите пожалуста горит проект , извиняюсь за лемерство


1-82694
Sergeyy
2002-11-14 16:33
2002.11.25
Обработка ошибок в модулях





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский