Вниз
Скачать: 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 вся ветка

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



Память: 0.48 MB
Время: 0.024 c
1-1137859937
Volf_555
2006-01-21 19:12
2006.02.19
Как прочитать ссылку, на которую ссылается ink-файл (файл ярлыка)


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


3-1135271039
Asail
2005-12-22 20:03
2006.02.19
Еще вопрос (TDataSetTableProducer)...


15-1138466807
QwertyKz
2006-01-28 19:46
2006.02.19
Access и Excel


15-1138443966
oldman
2006-01-28 13:26
2006.02.19
"Влип, очкарик" :))) (опрос)




   Наверх