Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как внести данные сразу в главную и дочернюю таблицы. В сетевой Б [D7, IB6.x]


Sanya_BBB ©   (2006-10-04 19:41:00) 

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

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;

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


ЮЮ   (2006-10-06 11:33:00) [1]

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

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

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

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


Desdechado   (2006-10-06 11:23:00) [2]

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


Johnmen   (2006-10-05 13:58:00) [3]

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


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


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

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


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

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


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

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

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


Sergey13   (2006-10-05 10:18:00) [7]

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

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


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

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


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


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


Что дальше?


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


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


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


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


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

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


Johnmen   (2006-10-04 23:33:00) [11]

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


Petr V. Abramov   (2006-10-04 22:56:00) [12]

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


Desdechado   (2006-10-04 22:26:00) [13]

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


Petr V. Abramov   (2006-10-04 22:24:00) [14]

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


Desdechado   (2006-10-04 22:02:00) [15]

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

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


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

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


Petr V. Abramov   (2006-10-04 21:09:00) [17]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо