-
... у базы Standart Jet DB (Access) через Ado.
Другими словами вставляю строку в таблицу у которой поле [id] - счетчик. Как получить значение этого счетчика после вставки?
Интересует все, кроме метода Select max([id]) FROM [SomeTable].
-
А другие уникальные ключи у этой таблицы имеются ?
Допускается ли модификация структуры таблицы для решения задачи ?
Допускается ли одновременная работа с таблицей в контексте более чем одной транзакции одновременнно ?
-
select @@Identity
-
Palladin © (18.07.08 13:56) [2]
Это Access
-
> Это Access
да, это все меняет... тогда надо
select @@Identity
-
> Palladin © (18.07.08 13:56) [2]
>
> select @@Identity
>
Спасибо! Как раз то, что нужно!
-
Palladin © (18.07.08 13:56) [2]
Работает! незнал.
sniknik © (18.07.08 14:09) [4]
ага :)
-
stas © (18.07.08 14:02) [3]
Ты укоряешь или хвастуешься незнанием?
-
Указанный селест должен следовать непосредственно после запроса на вставку в одном и том же TADOCommand, и считывать его через _RecordSet, полученный от него:
var
cm: TADOCommand;
ds: TADOQuery;
..
cm := TADOCommand.Create(nil);
cm.Connecton := ..
cm.CommandText := 'Insert ... '+' Select @@indentity';
ds := TADOQuery.Create(nil);
ds.recordset := cm.execute;
NewID := ds.recordset.Fields[0].AsInteger;
ds.Free;
cm.Free;
Try .. finally/except сами поставите ;)
-
Anatoly Podgoretsky © (18.07.08 15:54) [7]
stas © (18.07.08 14:24) [6]
-
> Указанный селест должен следовать непосредственно после запроса на вставку в одном и том же TADOCommand, и считывать его через _RecordSet,
> полученный от него:
вовсе не обязательно мудрить с TADOCommand и _RecordSet -ом.
что действительно нужно так это общий конект (TADOConnection) у обоих (TADOCommand, TADODataSet) и синхронное выполнение запросов (что по умолчанию), ну и считывать сразу после вставки само собой.
-
> sniknik © (18.07.08 16:30) [10]
В мс скл не поможет. Там только в одной команде должно идти.
В аксесс - не знаю.
-
>sniknik © (18.07.08 16:30) [10]
>вовсе не обязательно мудрить с TADOCommand и _RecordSet -ом.
Не вижу ничего мудреного. В конце концнв можно написать универсальную функцию и подключить ее к делфе.
>что действительно нужно так это общий конект (TADOConnection) у обоих (TADOCommand, >TADODataSet) и синхронное выполнение запросов (что по умолчанию), ну и считывать сразу >после вставки само собой.
Этого может быть недостаточно
-
> В мс скл не поможет.
а не про mssql разговор.
> Этого может быть недостаточно
достаточно с гарантией...
-
ANB (18.07.08 16:42) [11]
в mssql если есть триггер на таблице на insert в другую таблицу, то и в одной команде непоможет, нужно функцию использовать.
-
stas © (21.07.08 10:38) [14]
Чукча не читатель!
Сказали же, что про mssql речь не идет.
-
Anatoly Podgoretsky © (21.07.08 11:06) [15]
Да знаю я.
Ну, раз уж затронули mssql....
-
> Сказали же, что про mssql речь не идет.
Сори за офтоп.
Вот мне интересно, откуда берется множественное число в подобных фразах. Для преувеличения значимости сказанного? Или это попытка манипуляции с помощью общества?
-
> Dmitry S © (22.07.08 15:02) [17]
В соответствии с нормами русского языка. Ничего более.
Для тех, кто писатель, не читатель.
-
Как упоминалось можно найти запись по другим ключам.
Например, если есть поле ДатаВремя создания записи - найти свой ИД по нему, но есть моменты со вставкой и поиском.
Еще можно Recynс-Requery + bookmark использовать.
Но это все медленнее.