![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как внести данные сразу в главную и дочернюю таблицы. В сетевой Б [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 процедуру сделал и убрал бы триггеры