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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.072 c
3-1159240148
alabama01
2006-09-26 07:09
2006.12.10
Продажа билетов несколькими кассирами


3-1160042495
Kolan
2006-10-05 14:01
2006.12.10
А есть ли станодарт оформления кода на SQL?


2-1164013547
john81
2006-11-20 12:05
2006.12.10
BDE


2-1164270771
*Стажер*
2006-11-23 11:32
2006.12.10
TBitmap to XML


6-1153286706
zhekacoder
2006-07-19 09:25
2006.12.10
IP всех компов в сети





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