Форум: "Базы";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
ВнизКак узнать после INSERT присвоенный auto_increment ом ключ? Найти похожие ветки
← →
mikel (2005-01-14 13:03) [0]Как узнать после INSERT присвоенный auto_increment"ом ключ?
вот собственно и вопрос.
использую ADOConnection, ADOQuery.
Заранее огромное спасибо!
← →
ЮЮ © (2005-01-14 13:05) [1]Вот за это auto_increment и не люблю, что очень трудно "готовить" :)
Access что ли?
← →
mikel (2005-01-14 13:08) [2]нет, Oracle. А как "готовить"?
просто очень-очень надо узнать присвоенный записи ключ, либо другую технологию...
я уже премного всем благодарен за помощь. Но как с этим справиться так и не нашел пока ничего :(
← →
stone © (2005-01-14 13:09) [3]СУБД какая?
Для MSSQL и Access - @@IDENTITY
← →
mikel (2005-01-14 13:10) [4]СУБД - Oracle
Ставил галочку при создании темы, но чего-то Oracle не отображается :/
← →
Fay © (2005-01-14 13:16) [5]Сначала пролучи значение sequence-а, потом делай insert. И будет тебе Щястье.
← →
mikel (2005-01-14 13:17) [6]понял. фенкс!
← →
mikel (2005-01-14 13:21) [7]эх... ну вот беда то:
Sequence"а на эту таблицу нету... и создавать нельзя (по заданию).
← →
Ega23 © (2005-01-14 13:22) [8]Select Max(ID) в этой же транзакции?
← →
mikel (2005-01-14 13:25) [9]да... похоже остается только SELECT max(id)...
чтож делаю так.
Спасибо всем! и хорошего вам настроения :)
← →
Fay © (2005-01-14 13:29) [10]А почему именно MAX? Почему не AVG ? Как реализована последовательность?
← →
Sergey13 © (2005-01-14 13:32) [11]insert into my_table(f1,f2) value(:f1,:f2) returning id into :id
← →
Sergey13 © (2005-01-14 13:34) [12]values конечно 8-)
← →
mikel (2005-01-14 13:42) [13]> Fay
последовательность для этой таблицы не нашел. Я в этом конечно чайник, но созданной последовательности (create sequence...) для этой таблицы не было.
> Fay
Потому что MAX(id)+1 будет новый ключ
а AVG то зачем?
> Sergey13
спасибо! сейчас попробую!
← →
msguns © (2005-01-14 13:46) [14]А что, генераторов в оракле нетути ?
← →
mikel (2005-01-14 13:56) [15]в чем может быть ошибка?
with DM.ADOQ7 do
begin
Close;
SQL.Text := "SELECT MAX(id_r) AS max_id_r FROM regalia";
ExecSQL;
new_id_r := FieldByName("max_id_r").AsInteger+1;
end;
Ругается: "ADOQ7: field max_id_r not found"... :/
← →
Sergey13 © (2005-01-14 14:05) [16]Я с АДО не работал, но вместо ExecSQL не Open надо?
← →
Sergey13 © (2005-01-14 14:07) [17]2[15] mikel (14.01.05 13:56)
Кроме того - MAX - порочный путь. Если ИДшник генерится последовательностью, то можно узнать последний номер сгенеренный тобой.
select my_seq.curval from dual
← →
mikel (2005-01-14 14:13) [18]ок. > Serg13 Как узнать какой последовательностью генерится ключ для этой таблицы?
Попробовал такую конструкцию (но не знаю, что надо писать вместо "?"; получить надо id_r
insert into regalia (name, idk_r)
values ("asdf",20101)
returning ? INTO :?
Знал бы я какую последовательность использовать все было бы проще
insert into regalia (id_r, name, idk_r)
values (some_seq.nextval, "asdf",20101)
← →
mikel (2005-01-14 14:14) [19]>Serg13
ёшки... SELECT ведь... Конечно Open, а не ExecSQL
:) облажался :)
← →
Sergey13 © (2005-01-14 14:41) [20]2[18] mikel (14.01.05 14:13)
>Как узнать какой последовательностью генерится ключ для этой таблицы?
Посмотреть тригер этой таблицы на "перед вставкой".
insert into regalia (name, idk_r)
values ("asdf",20101)
returning id_r INTO :id_r
id_r - поле значение которого назо вернуть.
:id_r - это переменная запроса, которую можно прочитать после его выполнения. Имя может быть любым. Как в АДО это сделать (прочитать значение) - не знаю, АДО не юзал.
← →
mikel (2005-01-14 15:12) [21]понял. дело в том что такой запрос
insert into regalia (name, idk_r)
values ("asdf",20101)
returning id_r INTO :id_r
не проходит :(... пробую в PL/QL Developer
← →
Sergey13 © (2005-01-14 15:13) [22]2[21] mikel (14.01.05 15:12)
А тригер на таблицу с генерацией ИД есть?
← →
Sergey13 © (2005-01-14 15:15) [23]>не проходит :(... пробую в PL/QL Developer
Как не проходит? Может говорит что не все переменные привязаны? Так надо в Test Window смотреть - там можно переменные просматривать.
← →
mikel (2005-01-28 16:36) [24]> Sergey13 ©
так и говорит.
че то я не совсем понимаю. весь пример из TestWindow:
-- Created on 28.01.2005 by Èííà
declare
-- Local variables here
i integer;
be integer;
begin
-- Test statements here
insert into employees (surname, name, sex, date_of_birth)
values ("aaa","aaa",1,"28.01.2004") returning id_e into :be
end;
говорит ошибка... :(
← →
mikel (2005-01-28 17:02) [25]нашел триггер, нашел последовательность! ура!
но все равно малость не понимаю.
допустим запрос готов
insert into employees (id_e, name)
values (some_seq.nextval, "asdf")
но мне надо остаться с id_e. т.е. мне нужен id_e в программе.
← →
mikel (2005-01-28 17:05) [26]что-то я тут на сооброжал.
вопрос такой. для получения id_e остается только такой способ:?
select some_seq.currval from Dual
?
← →
fess © (2005-01-30 13:14) [27]USES ...,DB;
var s : string;
Для поиска в БД используешь следующую функцию:
Например: хотим найти ID_Discip вставленной дисциплины в таблицу
dm.ADOTableDiscip.Active:=false;
dm.ADOTableDiscip.Active:=true;
dm.ADOTableDiscip.Locate("NameOfDiscip", s, [loCaseInsensitive]);
Id_Discip:=dm.ADOTableDiscip.FieldByName("Id_Discip").AsInteger;
И все! ;)
Удачи!
← →
sniknik © (2005-01-30 23:11) [28]fess © (30.01.05 13:14) [27]
это к чему? ты вопрос то читал?
тем более с таблицами, попробуй с ними к серьезной базе сунься (в оракле обычно такие), и этот код у тебя по пол дня будет отрабатывать (пробовал как то на таблице с 40 милионами записей)... за это время автоинкремент на на пару тысяч записей "подрастет". ;о))
← →
Sergey13 © (2005-01-31 09:36) [29]2[24] mikel (28.01.05 16:36)
> говорит ошибка... :(
Так и говорит? Со смайликом? Сочувствует значит. 8-)
2[24] mikel (28.01.05 16:36)
Оставь в TestWindow только
insert into employees (surname, name, sex, date_of_birth)
values ("aaa","aaa",1,"28.01.2004") returning id_e into :be
be пропиши в списке переменных в нижнем окошке
2[26] mikel (28.01.05 17:05)
Теоретически можно и так. Только можно нарваться. Последовательность может быть дернута тобой же неявно в другом тригере например.
← →
Johnmen © (2005-01-31 09:45) [30]Просто интересно, а что, такое поле (id_e) есть в таблице ?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.039 c