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

Вниз

Как вставить данные одновременно в главную и подчиненную таблицы   Найти похожие ветки 

 
Gennadiy ©   (2003-10-01 16:14) [0]

Уважаемые мастера!!!!
Подскажите пожалуйста?
У меня есть две таблицы:
1. Таблица Employees с полями (таблица хранит данные о сотрудниках)
EMPL_ID - ключевое поле
EMPL_FIO -ФИО сотрудника
EMPL_SALARY - заработная плата сотрудника

2. Таблица STORY c полями (таблица хранит данные о истории зарплат сотрудников).
STORY_ID - ключевое поле
STORY_EMPL_IDE - ссылка на таблицу EMPLOYEES
STORYDATE-дата с новой з.п.
STORYSUMM-новая з.п.
Данные таблицы созданы на сервере INTERBASE. Так вот я не знаю
как одновременно (для пользователя) вставить данные в таблицу Story при создании новой записи в таблицe EMPLOYEES в пределах одной транзакции если значение ключевого поля в таблице EMPLOYEES (для вставки его значения в поле STORYEMPL_IDE таблицы STORY) появиттся только после Transaction.Commit????


 
Андрей_   (2003-10-01 17:26) [1]

Каким образом Вы создаете ключевое поле?
Если с помощью генератора то его приращение происходит вне транзакции.


 
Sergey_Masloff   (2003-10-01 17:31) [2]

Все нормальные пацаны ;-) получают значения ключей ДО вставки записей а не в триггере во время вставки. Делай и ты также.


 
Gennadiy ©   (2003-10-01 18:23) [3]

Я поле создаю с помощью триггера перед вставкой


 
Vasya_Buterbrodov   (2003-10-01 18:57) [4]

А почему, собственно, "нормальные пацаны получают значения ключей ДО вставки, а не в триггере..." ???
Чем плох вариант new.ID= gen_id(...) в триггере before_insert?


 
Sergey_Masloff   (2003-10-01 18:58) [5]

Vasya_Buterbrodov [4]
читай тему обсуждения и поймешь ;-)


 
MaxDDinc   (2003-10-01 21:54) [6]

Создай такую процедуру:
CREATE PROCEDURE PRC_INS_EMPLOYEES_STORY (
EMPL_FIO VARCHAR(16),
EMPL_SALARY VARCHAR(16),
STORYDATE VARCHAR(8),
STORYSUM VARCHAR(16)
) AS
DECLARE VARIABLE ID_NEW INTEGER;
BEGIN
ID_NEW = GEN_ID(GEN_EMPLOYEES, 1);
insert into EMPLOYEES
(EMPL_ID, EMPL_FIO, EMPL_SALARY)
values
(:ID_NEW, :EMPL_FIO, :EMPL_SALARY);
insert into STORY
(STORY_ID, STORY_EMPL_ID, STORYDATE, STORYSUMM)
values
(1, :ID_NEW, :STORYDATE, :STORYSUMM);
END
Здесь генеришь ID_NEW только для EMPLOYEES, а в STORY создай свой тригер BEFORE_INSERT
Что непонятно, спрашивай
:)


 
Deniz ©   (2003-10-02 08:40) [7]

>Vasya_Buterbrodov (01.10.03 18:57) [4]
>А почему, собственно, "нормальные пацаны получают значения ключей ДО вставки, а не в триггере..." ???
Чем плох вариант new.ID= gen_id(...) в триггере before_insert?

Плох только тем, что надо поменять на


if (new.id is null) then gen_id(...);


Во вторых, при добавлении записи на клиенте невозможно сделать Refresh только что вставленной записи, для возможного получения значений полей измененных тригером, например если в триггере есть запись типа:


new.update_date = Current_Date;
new.update_user = Current_User;


и т.д.



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

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

Наверх




Память: 0.48 MB
Время: 0.023 c
3-73993
havez
2003-09-25 14:34
2003.10.23
TExcelWorksheet


6-74367
Dimon
2003-08-28 06:00
2003.10.23
Статистика использования шар на локальном компьютере


14-74458
pasha_golub
2003-09-29 18:02
2003.10.23
---|Ветка была без названия|---


3-74018
StarCon
2003-09-29 13:12
2003.10.23
Список серверов в combo-box


1-74256
Bonny
2003-10-11 23:10
2003.10.23
Bitmap Unit