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

Вниз

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

 
Sanya_BBB   (2006-10-04 19:41) [0]

Есть две таблицы, первичная и дочерняя. Дочерняя связана с первичной по внешнему ключу. Первичные ключи обоих таблиц это числовые значения которые формируются и добавляются тригерами так:

Create generator g_MAIN_ID;
Set generator g_MAIN_ID to 1;
create trigger t_MAIN_ID for MAIN
Active
Before Insert
As
begin
new.id = gen_id(g_MAIN_ID, 1);;
end;

Create generator g_SLAVE_ID;
Set generator g_SLAVE_ID to 1;
create trigger t_SLAVE_ID for SLAVE
Active
Before Insert
As
begin
new.id = gen_id(g_SLAVE_ID, 1);;
end;

Как ввести данные сначала в главную таблицу а затем в дочернюю.Данные вводятся в одной форме. То есть проблема как узнать первичный ключ первой таблицы и сразу же ввести данные во вторую таблицу(дочернюю). База сетевая!!!


 
Petr V. Abramov ©   (2006-10-04 21:09) [1]

я б через stored процедуру сделал и убрал бы триггеры


 
Виталий Панасенко   (2006-10-04 21:27) [2]

Обычно ID узнают на клиенте... Потом подставляют в дочернюю.


 
Desdechado ©   (2006-10-04 22:02) [3]

Petr V. Abramov ©   (04.10.06 21:09) [1]
> я б через stored процедуру сделал и убрал бы триггеры
Без триггеров червато. Хотя бы тем, что минуя процедуры кто-то шибко шустрый можеттуда что-то вписать. после чего значенияиз генератора и в таблице фактические могут вступить в конфликт.

Я обычно делаю так:
1. стартую транзакцию
2. записываю данные в главную таблицу
3. узнаю ID путем перезапроса по ключевым полям
4. вставляю в подчиненную таблицу данные
5. подтверждаю транзакцию


 
Petr V. Abramov ©   (2006-10-04 22:24) [4]

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


 
Desdechado ©   (2006-10-04 22:26) [5]

шибко шустрый может и иметь права, на то он и шустрый
при этом думать, что он еще и умный, и лезть в БД напрямую, минуя процедуры и UI


 
Petr V. Abramov ©   (2006-10-04 22:56) [6]

> шибко шустрый может и иметь права, на то он и шустрый
> при этом думать, что он еще и умный,
 не давать прав никому, кроме как после третьего прошения :)
а на самом деле, просто двать права только на процедуры


 
Johnmen ©   (2006-10-04 23:33) [7]

Самое нетрудозатратное и нересурсоёмкое во всех смыслах Виталий Панасенко   (04.10.06 21:27) [2].


 
Petr V. Abramov ©   (2006-10-05 00:00) [8]

> Самое нетрудозатратное и нересурсоёмкое во всех смыслах
> Обычно ID узнают на клиенте...
 и дальше-то? два вызова insert (с их, вызовов, написанием)? не от нефиг же делать всякие рлскули с их младшими братьями придуманы-то


 
Johnmen ©   (2006-10-05 09:22) [9]


> и дальше-то?


Что дальше?


>  два вызова insert (с их, вызовов, написанием)?


Ну, наверное... А что?


>  не от нефиг же делать всякие рлскули с их младшими братьями
> придуманы-то


О чём это, я не понял...


 
Petr V. Abramov ©   (2006-10-05 10:06) [10]

> Ну, наверное... А что?
 так букв меньше один раз процедуру написать и вызвать, чем 2 триггера и да инсерта
> О чём это, я не понял...
pl/sql лениво было раскладку переключать :)


 
Sergey13 ©   (2006-10-05 10:18) [11]

> [10] Petr V. Abramov ©   (05.10.06 10:06)

А как в процедуру передать шапочную часть документа и табличную (позиций на несколько)? Массивом (просто я так никогда не делал, потому и интересуюсь)? Кроме того на добавление в деталь к уже существующей шапке - отдельную процу писать?


 
Сало   (2006-10-05 13:34) [12]

1. Процедура
2. Execute block
3. Клиент
4. Триггер на updatable view
5. returning c любым из вышеприведенных вариантов.

Вопрос чисто факовый, зачем вы тут разглагольствуете?


 
Johnmen ©   (2006-10-05 13:38) [13]

Действительно. Разглагольствовать о каких-то неуместных updatable view и Оракле, право, не стОит...


 
Сало   (2006-10-05 13:51) [14]


> Действительно. Разглагольствовать о каких-то неуместных
> updatable view и Оракле, право, не стОит...
>

Эй, дядя. Релизноты читай, перед вынесением очередного бреда. Все в рамках firebird.


 
Johnmen ©   (2006-10-05 13:58) [15]

А ты, мой таинственный друг, читай вопрос. Целиком.


 
Desdechado ©   (2006-10-06 11:23) [16]

Petr V. Abramov ©   (04.10.06 22:56) [6]
Под слишком шустрым и "типа умным" я имел ввиду, например, админа заказчика, который имея все права, но не имея глубокого понимания модели данных, заложенных в конкретную БД, шаловливыми ручками может много чего сделать...
Прецеденты в моей практике не единичные.


 
ЮЮ ©   (2006-10-06 11:33) [17]

Данные вводятся в одной форме.

В DBGrid-е или не DB ?
Если не в DB, то все в твоих руках.

Какого типа DataSet?

Кстати gen_id(g_SLAVE_ID, 1) можно вызвоть и на клинте, до вставки, а в триггере прописывать только в случае, если он не установлен



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

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

Наверх




Память: 0.51 MB
Время: 0.029 c
2-1164277724
Димыч
2006-11-23 13:28
2006.12.10
Сетевое окружение


15-1164020434
seul
2006-11-20 14:00
2006.12.10
субд


2-1164350708
r9000
2006-11-24 09:45
2006.12.10
Перевод строки в дату.


15-1163854834
MsGuns
2006-11-18 16:00
2006.12.10
Поздравляю болельщиков ЦСКА !!!


3-1159463414
Climber
2006-09-28 21:10
2006.12.10
GROUP BY