enola
есть 2 связанные таблицы в Oracle, Таблица1 и Таблица2 связываются через поля K1 и S1. В программе связал их через компоненты ODAC: OraQuery, OraDataSet и OraQuery1, OraDataSet1, в
OraQuery1 в поле mastersource указал OraDataSource
Update проходит на ура, а вот insert нужно сделать так: в первой таблице запись уже есть у нее есть и значение поля K1, когда во вторую таблицу делается инсерт необходимо этот ключ во вторую таблицу запихать, пробовал так не получается:
INSERT INTO Таблица2
S1, S2, ...
VALUES
:K1 (вот здесь не работает, нужно из таблицы1 взять ключ, как?), :K2, K3, ...
P.S. Не знаю
(вот здесь не работает, нужно из таблицы1 взять ключ, как?), :K2, K3, ...
Честно говоря, не очень понял, что ты за зоопарк развел.
ODAC может многое, но твою работу за тебя никто делать не будет. Если надо устанавливать значение главного ключа при вставке в подчиненную таблицу, это делается в событии OnNewRecord вручную, вне зависимости от компонентов.
http://forum.codenet.ru/showthread.php?threadid=21012&highlight=insert
AlexandrVSmirno пишет:
Есть две таблицы:
Таблица А
а - уникальный автоинкрементный ключ
в - символьная строка
Таблица Б
с - целое число
р - символьная строка
Кроме того задана связь master table А, table b по полям a->c.
Заполняется форма в которой для а и р вводятся значения. По нажатию кнопочки "Записать" делается:
insert into A (b) values (:p_Str) после чего необходимо в таблице Б создать запись для записи таблицы А. Грубо говоря insert into Б(с,р) values (:p_a,:p_Str1), где значение p_a равно только что созданому а из таблицы А.
Вопрос, как узнать это а.
у меня Таблица А уже заполнена, мне нужно при добавлении записи в Таблицу Б копировать "уникальный автоинкрементный ключ" из Таблицы А. как это сделать?
Автоинкремент поле таблицы сделать простым integer.
При вставке сперва запросить sequence NEXTVAL,
и записать это значение в 2 inserta.
Нужно определить sequence.
Автоинкремент поле таблицы сделать простым integer.
При вставке сперва запросить sequence NEXTVAL,
и записать это значение в 2 inserta.
Вы наверное меня не так поняли, у меня Таблица А уже заполнена и заполняется он с помощью другой программы, сторонней. Я же заполняю Таблицу Б, она является как бы спецификацией, т.е. Таблица А это шапка, а Таблица Б характеристики. Между таблицами есть связь по полю, вот это поле мне и нужно вставлять в Таблицу Б, как раз для этой связи. Как это поле получить из Таблицы А я и не знаю.
Вы наверное меня не так поняли, у меня Таблица А уже заполнена и заполняется он с помощью другой программы, сторонней. Я же заполняю Таблицу Б, она является как бы спецификацией, т.е. Таблица А это шапка, а Таблица Б характеристики. Между таблицами есть связь по полю, вот это поле мне и нужно вставлять в Таблицу Б, как раз для этой связи. Как это поле получить из Таблицы А я и не знаю.
INSERT INTO table1(...) VALUES(...)
INSERT INTO table2(...) VALUES(...)
при первом INSERT-е Oracle присваивает значение автоинкремент полю. Я предполагал, что проблема в том, что нужно получить это значение.
По всей вероятности, сторонняя программа добавляет запись в Table1 и нужно словить этот момент и определить значение автоинкрмент поля?
Или же просто insert выражение неправильное?
INSERT INTO table1(...) VALUES(...)
INSERT INTO table2(...) VALUES(...)
при первом INSERT-е Oracle присваивает значение автоинкремент полю. Я предполагал, что проблема в том, что нужно получить это значение.
По всей вероятности, сторонняя программа добавляет запись в Table1 и нужно словить этот момент и определить значение автоинкрмент поля?
Или же просто insert выражение неправильное?
придется все на пальцах объяснить ... :)
БД Oracle
есть таблица А:
RN (number)
PAY (varchar2(20))
....
таблица Б:
AGN_RN (number)
T_PAY (varchar2(160))
....
так вот я добавляю записи ТОЛЬКО в таблицу Б!
Таблица А уже заполнена, ничего перехватить я не могу, да и не нужно.
А необходимо:
есть запись в Таблице А, скажем
434969001
оплата по договору
.....
а в Таблицу Б нужно записать:
434969001
ля-ля-ля
......
все записать могу, только вот ентот RN он же в Таблице Б AGN_RN незнаю как получить?
причем у меня есть связка (как указано выше):
ODAC: OraQuery, OraDataSet (для Таблица А) и OraQuery1, OraDataSet1 (для Таблица Б), в OraQuery1 в поле mastersource указал OraDataSource
есть таблица А:
RN (number)
PAY (varchar2(20))
....
таблица Б:
AGN_RN (number)
T_PAY (varchar2(160))
....
так вот я добавляю записи ТОЛЬКО в таблицу Б!
Таблица А уже заполнена, ничего перехватить я не могу, да и не нужно.
Господи, ну нельзя же быть таким бараном, извини за выражение! Вроде задачи серьезные решаешь, а с докой работать так и не научился. Третий день тему мусолите, хотя ответ был дан с самого начала - смотри OnNewRecord у TOraQuery. Неужели все разжевать обязательно надо?!
Там надо всего одну строчку написать:
Господи, ну нельзя же быть таким бараном, извини за выражение!
вот с такими словами это ты погорячился! :(
а за ответ Большое спасибо, действительно заработало.
Где эту доку почитать, скажи мне книжку или ссылку без вопросов прочту!!!??? А под БД первый раз пишу, опыта нет. И поиск весь перелопатил, нет там ничего!
вот с такими словами это ты погорячился! :(
Твой ответ ниже подтвержает обратное.
Млять!!! Ну куда же уж проще простого! Нажать F1 на OraQuery, посмотреть Events. Только попробуй скажи, что в первый раз Билдер видишь или английского не знаешь! :devil:
Твой ответ ниже подтвержает обратное.
Млять!!! Ну куда же уж проще простого! Нажать F1 на OraQuery, посмотреть Events. Только попробуй скажи, что в первый раз Билдер видишь или английского не знаешь! :devil:
Билдер не первый раз вижу, и англицкий знаю, и F1 знаю и нажимал и не тупой!!! только у меня 3 дистриба (3.3.0, 4.5.0, 5.5.0) и все видать не полные, событие это есть я его нашел, а описание в хелпе по нему нет!!!
только у меня 3 дистриба (3.3.0, 4.5.0, 5.5.0) и все видать не полные, событие это есть я его нашел, а описание в хелпе по нему нет!!!
Ладно, забей. Не хочешь в следующий раз выглядеть глупо - найди полный дистрибутив и настрой его как надо.
Ладно, забей. Не хочешь в следующий раз выглядеть глупо - найди полный дистрибутив и настрой его как надо.
а за ответ все равно, еще раз, спасибо! :)