Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ID последней добавленной записи [D7, любая СУБД]


Страницы:   1 2 3 4 5

DVM ©   (2008-09-04 12:03:00) 

Вопрос тут уже вроде всплывал тут, но в основном касался каких то конкретных СУБД, например Access. Мне же нужен по возможности универсальный вариант, ну пусть хотя бы одинаково работающий в Access, MySQL, MSSQL, Oracle.

Посредством SQL запроса в таблицу добавляется некая запись. Одним из полей таблицы является автоинкрементное поле счетчик (ID).
После добавления записи в таблицу мне нужно получить значение поля ID для этой добавленной записи.

Как в таких случаях обычно поступают? Писать разный код для разных СУБД? Ввести свое доп. поле в которое пихать собственноручно сгенерированное чудо типа GUID и сразу после добавления находить запись по этому полю?


Johnmen   (2008-09-04 17:12:00) [41]


> Какой "клиент" может дать вам гарантированно уникальный
> идентификатор (не GUID)?

А этого и не требуется :)

> Какой запрос гарантированно защитит вас от многопользовательской  коллизии?

Не запрос. А возвращаемая сервером ошибка.

> Зачем СУБД городили все эти генераторы, последовательности,
>  автоинкременты и т.п.?

Перечитай постановку вопроса автора ветки.

ЗЫ
Начинаешь огорчать...:(


Курдль   (2008-09-04 17:08:00) [42]

Какой "клиент" может дать вам гарантированно уникальный идентификатор (не GUID)?
Какой запрос гарантированно защитит вас от многопользовательской коллизии?

Зачем СУБД городили все эти генераторы, последовательности, автоинкременты и т.п.?


Ega23   (2008-09-04 17:01:00) [43]


> Хотя они друг друга стоят.


А в чём проблема генерации ID на клиенте? Искренне не понимаю...


Правильный$Вася   (2008-09-04 17:01:00) [44]

пошли разборки, пора закрываться


Johnmen   (2008-09-04 16:57:00) [45]


> stas ©   (04.09.08 16:40) [39]
> Johnmen ©   (04.09.08 16:34) [38]более глупого поста чем
> Johnmen ©   (04.09.08 13:34) [32]в этой ветке небыло.

Это ты так думаешь на основании своих убогих знаний и нулевого опыта.

> Курдль   (04.09.08 16:52) [41]
> Хотя они друг друга стоят.

Не стОит право ровнять моё предложение [32] с [5].
А то могу подумать грустное про тебя...:)


Курдль   (2008-09-04 16:52:00) [46]

Жаль, что нельзя вставить в цитату все посты в этой ветке...
Куда катится мир? До чего довел планету этот фигляр Пэжэ?!!


> stas ©   (04.09.08 16:40) [39]
>
> Johnmen ©   (04.09.08 16:34) [38]
> более глупого поста чем Johnmen ©   (04.09.08 13:34) [32]
> в этой ветке небыло.


БЫЛО!!! Вот это:

> stas ©   (04.09.08 12:22) [5]
>
> DVM ©   (04.09.08 12:03)
> наверное такой:
> после вставки
> select max(ID) from mytable

Хотя они друг друга стоят.


Ega23   (2008-09-04 16:46:00) [47]


> более глупого поста чем Johnmen ©   (04.09.08 13:34) [32]
> в этой ветке небыло.


Вообще-то он как бы по делу спросил...


stas   (2008-09-04 16:40:00) [48]

Johnmen ©   (04.09.08 16:34) [38]
более глупого поста чем Johnmen ©   (04.09.08 13:34) [32]
в этой ветке небыло.


Johnmen   (2008-09-04 16:34:00) [49]


> stas ©   (04.09.08 16:26) [37]
> Опять же,  что автору требуется?

Ты не только бредишь в ответах, но и принципиально не читаешь постановку вопроса ветки?
Или же первое - результат второго?
Просто интересно...


stas   (2008-09-04 16:26:00) [50]

Ega23 ©   (04.09.08 14:45) [36]

1. Опять же,  что автору требуется?
2. Какой скрипт не пойдет лесом?


Ega23   (2008-09-04 14:45:00) [51]


> Типа такого:


Что типа такого? Ещё раз: я могу в таблицу с Identity-полем вставить в "дырку" ключевое значение, отключив на время Identity. И твой скрипт в этом случае:
а) пойдёт лесом.
б) даже если и не пойдёт, то будет работать только под mssql.


stas   (2008-09-04 14:34:00) [52]

Ega23 ©   (04.09.08 14:31) [34]

Типа такого:
declare @ID  int
Insert into...
Set @ID=scope_identity()

Insert into ... Values (@ID)


Ega23   (2008-09-04 14:31:00) [53]


> а как решит проблему модуль-посредник если этот ID надо
> использовать в дальнеших инструкциях запроса?


Если надо использовать - то используй, тебе никто не мешает.

declare @ID uniqueidentifier;
Set @ID=:ID
Set NoCount On

Insert into Table1 (ID, .....) Values (@ID, .....);
Insert into Table2 (ID, .....) Values (@ID, .....);
/*
 Используем @ID так, как хочеццо.

*/


stas   (2008-09-04 13:49:00) [54]

Ega23 ©   (04.09.08 13:31) [31]
Ну, так тогда о чем вообще разговор?
Узнать в любой базе последний вставленый ID?  
а если было сразу вставлено 5 строк?
а как решит проблему модуль-посредник если этот ID надо использовать в дальнеших инструкциях запроса?
И насколько сложная и ответственная задача чтобы это все городить?
Johnmen ©   (04.09.08 13:34) [32]
генеальное решение. :-D


Johnmen   (2008-09-04 13:34:00) [55]


> DVM ©   (04.09.08 12:03) 

В данных условиях я бы генерил уникальное значение на клиенте. (Ну понятное дело, что не 100% уникальное:))

> Игорь Шевченко ©   (04.09.08 13:06) [24]
> ты бредишь

Причем делает это перманентно в на разные темы...


Ega23   (2008-09-04 13:31:00) [56]


> 1. Ты уверен что scope_identity() в этом варианте тебе вернет
> верное значение?


А ты уверен, что scope_identity() тебе вообще что-то вернёт в этом случае?
смотри в сторону SET IDENTITY_INSERT ON/OFF


Правильный$Вася   (2008-09-04 13:29:00) [57]


> stas ©   (04.09.08 13:28) [29]

это автоинкрементное поле счетчик (ID)только в голове автора, т.к. СУБД абстрактная, то это не более, чем идея, а не способ реализации


stas   (2008-09-04 13:28:00) [58]

Ega23 ©   (04.09.08 13:18) [26]

1. Ты уверен что scope_identity() в этом варианте тебе вернет верное значение?
2.

> Одним из полей таблицы является автоинкрементное поле
> счетчик (ID)
.
> После добавления записи в таблицу мне нужно получить значение
> поля ID для этой добавленной записи.


DVM   (2008-09-04 13:24:00) [59]


> Sergey13 ©   (04.09.08 13:09) [25]

Теперь ясно, спасибо.


Ega23   (2008-09-04 13:19:00) [60]


> ты бредишь


+1


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо