Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

enola

335
14 июля 2005 года
enola
379 / / 25.01.2005
Вот такая проблема:
есть 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, ...
335
15 июля 2005 года
enola
379 / / 25.01.2005
народ неужели никто не знает как решить данную проблему?
1.9K
15 июля 2005 года
imported_ФДУЧ
104 / / 07.04.2005
Да прибудет с тобой сила

P.S. Не знаю
335
15 июля 2005 года
enola
379 / / 25.01.2005
Вот ни за что не поверю, что Freeman не знает ответ на сей вопрос!
10
15 июля 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by enola
(вот здесь не работает, нужно из таблицы1 взять ключ, как?), :K2, K3, ...


Честно говоря, не очень понял, что ты за зоопарк развел.

ODAC может многое, но твою работу за тебя никто делать не будет. Если надо устанавливать значение главного ключа при вставке в подчиненную таблицу, это делается в событии OnNewRecord вручную, вне зависимости от компонентов.

335
15 июля 2005 года
enola
379 / / 25.01.2005
я на ODAC и не хочу переложить свою работу. Но вот под БД на Builder пишу первый раз, не все понятно до конца; нашел это событие у OraQuery.
1.9K
15 июля 2005 года
imported_ФДУЧ
104 / / 07.04.2005
Чувак помаги вНАтуРЕ ответь на вопрос http:http://www.codenet.ru/bb/show.php?t=f&p=2&loc=http%3A//forum.codenet.ru/showthread.php%3Fs%3D%26threadid%3D24616&nocache=447318
335
18 июля 2005 года
enola
379 / / 25.01.2005
Может все-таки кто-нибудь подскажет как этот insert сделать, или где почитать про такие, у меня получается, когда запись в подчиненной таблице уже есть делать update, а вот новую добавить ну ни как!
335
19 июля 2005 года
enola
379 / / 25.01.2005
Вот покопался в поиске и нашел подобную задачу:
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 равно только что созданому а из таблицы А.
Вопрос, как узнать это а.

у меня Таблица А уже заполнена, мне нужно при добавлении записи в Таблицу Б копировать "уникальный автоинкрементный ключ" из Таблицы А. как это сделать?
488
19 июля 2005 года
Mоngооsе
465 / / 01.04.2005
Нужно определить sequence.
Автоинкремент поле таблицы сделать простым integer.

При вставке сперва запросить sequence NEXTVAL,
и записать это значение в 2 inserta.
335
19 июля 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by Mоngооsе
Нужно определить sequence.
Автоинкремент поле таблицы сделать простым integer.

При вставке сперва запросить sequence NEXTVAL,
и записать это значение в 2 inserta.



Вы наверное меня не так поняли, у меня Таблица А уже заполнена и заполняется он с помощью другой программы, сторонней. Я же заполняю Таблицу Б, она является как бы спецификацией, т.е. Таблица А это шапка, а Таблица Б характеристики. Между таблицами есть связь по полю, вот это поле мне и нужно вставлять в Таблицу Б, как раз для этой связи. Как это поле получить из Таблицы А я и не знаю.

488
19 июля 2005 года
Mоngооsе
465 / / 01.04.2005
Цитата:
Originally posted by enola
Вы наверное меня не так поняли, у меня Таблица А уже заполнена и заполняется он с помощью другой программы, сторонней. Я же заполняю Таблицу Б, она является как бы спецификацией, т.е. Таблица А это шапка, а Таблица Б характеристики. Между таблицами есть связь по полю, вот это поле мне и нужно вставлять в Таблицу Б, как раз для этой связи. Как это поле получить из Таблицы А я и не знаю.


INSERT INTO table1(...) VALUES(...)
INSERT INTO table2(...) VALUES(...)

при первом INSERT-е Oracle присваивает значение автоинкремент полю. Я предполагал, что проблема в том, что нужно получить это значение.

По всей вероятности, сторонняя программа добавляет запись в Table1 и нужно словить этот момент и определить значение автоинкрмент поля?

Или же просто insert выражение неправильное?

335
19 июля 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by Mоngооsе
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

10
19 июля 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by enola
есть таблица А:
RN (number)
PAY (varchar2(20))
....

таблица Б:
AGN_RN (number)
T_PAY (varchar2(160))
....

так вот я добавляю записи ТОЛЬКО в таблицу Б!
Таблица А уже заполнена, ничего перехватить я не могу, да и не нужно.


Господи, ну нельзя же быть таким бараном, извини за выражение! Вроде задачи серьезные решаешь, а с докой работать так и не научился. Третий день тему мусолите, хотя ответ был дан с самого начала - смотри OnNewRecord у TOraQuery. Неужели все разжевать обязательно надо?!

Там надо всего одну строчку написать:

 
Код:
DataSet -> FieldByName("AGN_RN") -> AsInteger = OraQueryA -> FieldByName("RN") -> AsInteger;
335
19 июля 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by Freeman
Господи, ну нельзя же быть таким бараном, извини за выражение!



вот с такими словами это ты погорячился! :(

Цитата:
Там надо всего одну строчку написать:
 
Код:
DataSet -> FieldByName("AGN_RN") -> AsInteger = OraQueryA -> FieldByName("RN") -> AsInteger;


а за ответ Большое спасибо, действительно заработало.

Где эту доку почитать, скажи мне книжку или ссылку без вопросов прочту!!!??? А под БД первый раз пишу, опыта нет. И поиск весь перелопатил, нет там ничего!

10
19 июля 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by enola
вот с такими словами это ты погорячился! :(


Твой ответ ниже подтвержает обратное.

Цитата:
Где эту доку почитать, скажи мне книжку или ссылку без вопросов прочту!!!??? А под БД первый раз пишу, опыта нет.


Млять!!! Ну куда же уж проще простого! Нажать F1 на OraQuery, посмотреть Events. Только попробуй скажи, что в первый раз Билдер видишь или английского не знаешь! :devil:

335
19 июля 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by Freeman
Твой ответ ниже подтвержает обратное.

Млять!!! Ну куда же уж проще простого! Нажать F1 на OraQuery, посмотреть Events. Только попробуй скажи, что в первый раз Билдер видишь или английского не знаешь! :devil:



Билдер не первый раз вижу, и англицкий знаю, и F1 знаю и нажимал и не тупой!!! только у меня 3 дистриба (3.3.0, 4.5.0, 5.5.0) и все видать не полные, событие это есть я его нашел, а описание в хелпе по нему нет!!!

10
19 июля 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by enola
только у меня 3 дистриба (3.3.0, 4.5.0, 5.5.0) и все видать не полные, событие это есть я его нашел, а описание в хелпе по нему нет!!!


Ладно, забей. Не хочешь в следующий раз выглядеть глупо - найди полный дистрибутив и настрой его как надо.

335
19 июля 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by Freeman
Ладно, забей. Не хочешь в следующий раз выглядеть глупо - найди полный дистрибутив и настрой его как надо.



а за ответ все равно, еще раз, спасибо! :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог