Вниз
Скачать: CL | DM;

ADOCommand   Найти похожие ветки 

 
Леонид   (2007-12-05 19:25) [0]

Не подскажите как можно после INSERT-а узнать ID добавленной строки?

 sql = "INSERT INTO tb (`id`,`value`) VALUES (null,"value")";
 ADOCommand1.CommandText := sql;
 ADOCommand1.Execute;


 
Palladin ©   (2007-12-05 19:27) [1]

так ведь сам же вставил
ID=Null


 
Леонид   (2007-12-05 19:28) [2]

ID - автоинкрементное поле, запрос эквивалент  sql = "INSERT INTO tb (`value`) VALUES ("value")";

null - для наглядности


 
Palladin ©   (2007-12-05 19:31) [3]

select @@Identity


 
Desdechado ©   (2007-12-05 21:04) [4]

> select @@Identity
Это для MSSQL.
У авторя неясно что.
В общем случае решается только, если в таблице есть уникальный ключ, не содержащий поле инкремента. Тогда по нему можно перезапросить вставленное и узнать ID.


 
Юрий Зотов ©   (2007-12-05 21:13) [5]

Если поле автоинкрементное, то select max?


 
palva ©   (2007-12-05 21:18) [6]

> Если поле автоинкрементное, то select max?
Если, конечно, другой пользователь не успел между вашим созданием и запросом создать еще несколько своих записей.


 
Palladin ©   (2007-12-05 21:19) [7]


> Desdechado ©   (05.12.07 21:04) [4]

ну не только MSSQL, это вообще как бы стандарт TSQL


 
Palladin ©   (2007-12-05 21:20) [8]


> palva ©   (05.12.07 21:18) [6]

max вполне можно использовать если оформить это в единой транзакции


 
Desdechado ©   (2007-12-05 21:33) [9]

> max вполне можно использовать если оформить это в единой
> транзакции
Что-то подозрительно это, хоть и не знаю MS, но по идее автоинкремент работает в контексте базы, а не транзакции, иначе бы другие юзеры не могли добавлять до окончания твоей транзакции.


 
Johnmen ©   (2007-12-05 21:34) [10]


> Palladin ©   (05.12.07 21:20) [8]
> max вполне можно использовать
> если оформить это в единой транзакции

Не зависимо от уровня её изоляции? :)


 
Palladin ©   (2007-12-05 22:10) [11]


> Johnmen ©   (05.12.07 21:34) [10]

зависимо, натыкался :)


 
oxffff ©   (2007-12-06 08:41) [12]

RTFM

@@IDENTITY and SCOPE_IDENTITY return the last identity value generated in any table in the current session.
However, SCOPE_IDENTITY returns the value only within the current scope; @@IDENTITY is not limited to a specific scope.


 
Johnmen ©   (2007-12-06 09:19) [13]


> oxffff ©   (06.12.07 08:41) [12]

А как же [4]?


 
Palladin ©   (2007-12-06 09:31) [14]


> oxffff ©   (06.12.07 08:41) [12]

речь не об @@Identity, если что, с ним то все понятно, а об использовании max внутри транзакции...


 
oxffff ©   (2007-12-06 12:25) [15]


> Johnmen ©   (06.12.07 09:19) [13]



> Palladin ©   (06.12.07 09:31) [14]


А как насчет триггера?
Для MSSQL анализ inserted таблицы.


 
Anatoly Podgoretsky ©   (2007-12-06 13:36) [16]

Автор не хочет разглашать базу, а вы тут копья ломаете.


 
KSergey ©   (2007-12-06 14:31) [17]

> Anatoly Podgoretsky ©   (06.12.07 13:36) [16]
> Автор не хочет разглашать базу, а вы тут копья ломаете.

А это прикольно.
Вообще, голубые, простите, занятно активизировались :)


 
Anatoly Podgoretsky ©   (2007-12-06 15:00) [18]

> KSergey  (06.12.2007 14:31:17)  [17]

Сам ты голубой :-)


 
Palladin ©   (2007-12-06 15:15) [19]

Просто у некоторых голубых инет появился :)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.01 c
2-1196346251
mufan
2007-11-29 17:24
2007.12.30
RichEdit и таблица


2-1196766424
Цукор
2007-12-04 14:07
2007.12.30
TOpenDialog


15-1196343324
Slider007
2007-11-29 16:35
2007.12.30
С днем рождения ! 29 ноября 2007 четверг


2-1196604891
DevilDevil
2007-12-02 17:14
2007.12.30
Программно выделить определённую ячейку StringGrid-а


1-1191843583
REA
2007-10-08 15:39
2007.12.30
ImageList - ImageIndex design time




   Наверх