Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: CL | DM;

Вниз

Значения AutoInc поля только что введенной записи   Найти похожие ветки 

 
Barsky ©   (2005-12-22 17:20) [0]

Есть табличка на 2 поля
F1 (AutoInc)
F2 (A255)

Делаем:

query.sql.text:="INSERT INTO моя_табличка (F2) VALUES ("123")";
query.execsql


В F1 автоматически записывается значение. Как его узнать?


 
msguns ©   (2005-12-22 17:43) [1]

Select max(F1) from моя_табличка


 
Barsky ©   (2005-12-22 17:53) [2]

А если между этими запросами кто-то еще добавил запись?
Тогда так не получится.


 
sniknik ©   (2005-12-22 17:56) [3]

Barsky ©   (22.12.05 17:53) [2]
парадокс! ;)


 
Barsky ©   (2005-12-22 18:00) [4]


> sniknik ©   (22.12.05 17:56) [3]


=))))))

Тоесть в данном случае без хитрых вывертов с ведением логов активности юзеров не выкрутиться? =)


 
Slym ©   (2005-12-23 07:22) [5]

Открывать курсор


 
ЮЮ ©   (2005-12-23 08:08) [6]

отказаться от автоинкремента, генерировать его на клиенте (тот же MAX), обернув вставку в try ... exept таким, чтобы увернуться от попытки вставить запись с существующим значением F1.

З.Ы. Ну что это за имена полей F1, F2 ?


 
Виталий Панасенко   (2005-12-23 09:24) [7]

Использовать TTable


 
Sergey13 ©   (2005-12-23 09:35) [8]

[6] ЮЮ ©   (23.12.05 08:08)
>отказаться от автоинкремента
ИМХО, лучше сразу от Парадокса. Тем более много народу работает (много - это >1 8-).


 
Barsky ©   (2005-12-23 09:37) [9]


> Slym ©   (23.12.05 07:22) [5]
> Открывать курсор


Что это?


ЮЮ ©   (23.12.05 08:08) [6]
> З.Ы. Ну что это за имена полей F1, F2 ?

Это не фрагмент, а пример кода =)


 
ЮЮ ©   (2005-12-23 09:50) [10]

Ну и ещё как вариант, не требующий никаких переделок :

query.sql.text:="INSERT INTO моя_табличка (F2) VALUES ("123")";
query.execsql;

query.sql.text:=SELECT F1 FROM моя_табличка WHERE F2="123"";
query.Open;

Даже если при этом прихватишь не "свою" запись, какая разница, она же идентична той, что ввел ты :)


 
ANB ©   (2005-12-23 10:42) [11]


> Barsky ©   (22.12.05 17:53) [2]
> А если между этими запросами кто-то еще добавил запись?
> Тогда так не получится.

На время этих двух запросов блокировать таблицу. Будет медленнее, но надежнее.


 
Barsky ©   (2005-12-23 10:45) [12]


> ЮЮ ©   (23.12.05 09:50) [10]


Поле F2 не уникальное, и есть вариант что запостят 2 записи с одинаковым значением этого поля. Тогда облом.
Вероятность минимальная, но всякое может случиться. Так что не катит =)


 
Sergey13 ©   (2005-12-23 10:52) [13]

2 [12] Barsky ©   (23.12.05 10:45)
Против этого "облома" существует MAX.


 
Barsky ©   (2005-12-23 11:19) [14]


> Sergey13 ©   (23.12.05 10:52) [13]


И как он поможет?

2All: Кароче задача без выкрутасов не решается =)


 
Sergey13 ©   (2005-12-23 11:23) [15]

2[14] Barsky ©   (23.12.05 11:19)
>И как он поможет?
Да как всегда.

query.sql.text:=SELECT MAX(F1) FROM моя_табличка WHERE F2="123"";


 
sniknik ©   (2005-12-23 11:33) [16]

> Поле F2 не уникальное, и есть вариант что запостят 2 записи с одинаковым значением этого поля. Тогда облом.
используй уникальное, и только для идентификации записи, после меняеш на рабочее значение.

var
 Guid: TGUID
 stGuid: string;
begin
 CreateGUID(Guid);
 stGuid:= GUIDToString(Guid)

 query.sql.text:="INSERT INTO моя_табличка (F2) VALUES (""+stGuid+"")";
 query.execsql;

 query.sql.text:=SELECT F1 FROM моя_табличка WHERE F2=""+stGuid+""";
 query.Open;

 //получили однозначный, теперь апдейт и вся работа с записью через ключевое поле

 ....

тормозно зато с гарантией. тормоза тоже немного можно "остимизировать" (убрать), например считывать перед инсертом максимальный инкремент и в выборке на получение (второй запрос) использовать двойное условие > сохраненного и = stGuid (чтобы не было полного перебора по скорей всего неиндексируемому полю)



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

Текущий архив: 2006.02.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.048 c
2-1138559158
JEK2
2006-01-29 21:25
2006.02.19
Зеркальное отображение картинки


15-1138629674
Ega23
2006-01-30 17:01
2006.02.19
До чего-же гениальное описание воздушного боя!


2-1138881711
BaBayka007
2006-02-02 15:01
2006.02.19
Отсутствует доступ к базе


15-1138250776
begin...end
2006-01-26 07:46
2006.02.19
С Днём рождения! 26 января


2-1139037209
John_Doe
2006-02-04 10:13
2006.02.19
Считывание значений из Table в Combobox