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

Вниз

Вставка данных в две таблицы   Найти похожие ветки 

 
TL   (2009-01-15 09:39) [0]

Добрый день!

Суть вопроса такова:
Имеются две связанные таблицы:

Таблица1 (Ид_Таблица1, поле1, поле2, ...полеN)
Таблица2 (Ид_Таблица2, Ид_Таблица1, поле3, поле4...полеN)

Связь между ними : Таблица1.Ид_Таблица1 = Таблица2.Ид_Таблица1

Для каждой таблицы имеются триггеры и генераторы.

Необходимо, что бы при вставке данных(Ид_Таблица1, поле1, поле2, ...полеN) в "Таблица1", в "Таблица2" тоже вносились данные(Ид_Таблица2, Ид_Таблица1, поле3, поле4...полеN).

Буду рад проведеному ликбезу...


 
Sergey13 ©   (2009-01-15 09:58) [1]

> [0] TL   (15.01.09 09:39)
> IB5.x
А похуже ничего нет? Судя по отзывам - самая левая версия сервера.

> Буду рад проведеному ликбезу...
Суть идеи в том, что генерировать новое значение ключа можно прямо в тригере при вставке, а можно заранее, перед вставкой. И после этого оперировать этим значением при инсертах в дочерние таблицы.


 
TL   (2009-01-15 10:10) [2]

в тригере, для Таблица1, генерируется новое значение ключа ИД_Таблица1 перед вставкой, но, несовсем понимаю, как написать тригер, чтобы в нем, сразу же после сгенерированого ИД_Таблица1, делалась вставка данных в Таблица2 с этим NEW.ИД_Таблица1...


 
Sergey13 ©   (2009-01-15 10:14) [3]

> [2] TL   (15.01.09 10:10)
> в тригере, для Таблица1, генерируется новое значение ключа
> ИД_Таблица1 перед вставкой

В этом случае не надо для Т1 генерировать в тригере. Надо заранее. Т.е. в тригере должна стоять проверка
if :new.id is null then :new.id=GenId(tr1,1)


 
TL   (2009-01-15 10:29) [4]

ага...так оно и есть...
меня больше всего волнует, как сразу после того, как сгенерировали ключ в Т1, сделать вставку данных в Т2 ...

if  New.ИД_Таблица1 is null then New.ИД_Таблица1 = gen(ГенераторТ1,1);
/*хочу вставить значения в Т2*/
 ??????????
insert into Таблица2 (Ид_Таблица2, Ид_Таблица1, поле3, поле4...полеN) ?????


 
Медвежонок Пятачок ©   (2009-01-15 10:32) [5]

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


 
Sergey13 ©   (2009-01-15 10:35) [6]

> [4] TL   (15.01.09 10:29)
> меня больше всего волнует, как сразу после того, как сгенерировали
> ключ в Т1, сделать вставку данных в Т2 ...

Cразу после того, как сгенерировали ключ в Т1 надо вставить запись в Т1. А вот потом вставлять уже в подчиненную Т2. Отдельным запросом.


 
TL   (2009-01-15 10:40) [7]

сгенерировали ключ,
сделали вставку данных в Т1,
как "запомнить" значение ИД_Таблица1, что бы его же вставить и в Таблица2 вторым запросом?


 
Медвежонок Пятачок ©   (2009-01-15 10:45) [8]

ид_таблица1 у тебя уже есть перед инсертом в обе таблицы


 
Sergey13 ©   (2009-01-15 10:48) [9]

> [7] TL   (15.01.09 10:40)
> сгенерировали ключ,
> сделали вставку данных в Т1
> как "запомнить" значение ИД_Таблица1, что бы его же вставить и в Таблица2 вторым запросом?

Т.е. до вставки в Т1 ты его помнил, а потом забыл?


 
TL   (2009-01-15 13:05) [10]

можно пример?


 
Sergey13 ©   (2009-01-15 13:18) [11]

> [10] TL   (15.01.09 13:05)

Пример чего? Ты сам пишешь только русско-язычную отсебятину вместо кода. Что конкретно и как конкретно не получается.


 
TL   (2009-01-15 13:37) [12]

Делаю первый Insert:
Insert into table_1 (ident, field_date, field_number, field_date1, field_number1) values (:ident, :date, :number, :date1, :number1)

перед вставкой получаем id_table1

Делаю второй Insert:
Insert into Table_2 (id_table1, field_naim, field_count, field_price )
values (:id, :naim, :fc, :fp)

как в id присвоить полученное значение из триггера, т .е id_table1?


 
Sergey13 ©   (2009-01-15 14:03) [13]

> [12] TL   (15.01.09 13:37)
> перед вставкой получаем id_table1

Как?


 
TL   (2009-01-15 14:15) [14]

if ( NEW.id_table1 is null ) then NEW.id_table1 = gen_id(gentable1,1);


 
Sergey13 ©   (2009-01-15 14:22) [15]

> [14] TL   (15.01.09 14:15)

В тригере? А надо ДО ВСТАВКИ в ОТДЕЛЬНОМ ЗАПРОСЕ из клиента.
В тригере идет ПРОВЕРКА на нул. Если тебе не нужен вставляемый ид-шник, то можно переложить его генерение на тригер. В твоем случае это не нужно. Нужно вставлять в запрос на вставку в Т1 заранее сгенеренное значение.


 
TL   (2009-01-15 15:00) [16]

будет ли корректным запрос с "клиента" , для получения ID:

select first 1 id_table1+1
from table_1
order by id_table1 desc

?


 
Sergey13 ©   (2009-01-15 15:02) [17]

> [16] TL   (15.01.09 15:00)
> будет ли корректным

С точки зрения синтаксиса будер корректно.
С точки зрения логики работы нет.
Если мне не изменяет память нужно спрашивать
select GenId(triger,1) from rdb$database


 
Виталий Панасенко(дом)   (2009-01-16 22:19) [18]


> Sergey13 ©   (15.01.09 15:02) [17]

Не обязательно..Просто в этой системной таблицы всегда(пока?) одна запись


 
Труп Васи Доброго ©   (2009-01-22 16:39) [19]

БЛин, ты хоть напиши где ты это пишешь...
Если это в ХП, то введи переменные и присвой им значения генераторов, а потом вставляй их куда угодно.



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

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

Наверх




Память: 0.49 MB
Время: 0.004 c
15-1256225989
Empleado
2009-10-22 19:39
2010.01.03
Поднять облака! Интересно, о какой "установке" идет речь ?...


3-1232432122
pavel_guzhanov
2009-01-20 09:15
2010.01.03
Проблема с памятью


15-1256980367
DmitriyG.
2009-10-31 12:12
2010.01.03
Виснет Delphi


15-1257173342
Иксик
2009-11-02 17:49
2010.01.03
Есть ли возможность вынести javascript события типа onclick


15-1257250712
koha!
2009-11-03 15:18
2010.01.03
ищу редактор ресурсов заточенный под делфи





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский