Конференция "Базы" » получить Insert Id после запроса INSERT... [D7, MSAccess via Ado]
 
  • 123456711 (18.07.08 13:40) [0]
    ... у базы Standart Jet DB (Access) через Ado.

    Другими словами вставляю строку в таблицу у которой поле [id] - счетчик. Как получить значение этого счетчика после вставки?

    Интересует все, кроме метода Select max([id]) FROM [SomeTable].
  • Сергей М. © (18.07.08 13:56) [1]
    А другие уникальные ключи у этой таблицы имеются ?
    Допускается ли модификация структуры таблицы для решения задачи ?
    Допускается ли одновременная работа с таблицей в контексте более чем одной транзакции одновременнно ?
  • Palladin © (18.07.08 13:56) [2]
    select @@Identity
  • stas © (18.07.08 14:02) [3]
    Palladin ©   (18.07.08 13:56) [2]
    Это Access
  • sniknik © (18.07.08 14:09) [4]
    > Это Access
    да, это все меняет... тогда надо
    select @@Identity

  • 123456711 (18.07.08 14:16) [5]

    > Palladin ©   (18.07.08 13:56) [2]
    >
    > select @@Identity
    >

    Спасибо! Как раз то, что нужно!
  • stas © (18.07.08 14:24) [6]
    Palladin ©   (18.07.08 13:56) [2]
    Работает! незнал.
    sniknik ©   (18.07.08 14:09) [4]
    ага :)
  • Anatoly Podgoretsky © (18.07.08 15:54) [7]
    stas ©   (18.07.08 14:02) [3]
    Ты укоряешь или хвастуешься незнанием?
  • MsGuns © (18.07.08 16:15) [8]
    Указанный селест должен следовать непосредственно после запроса на вставку в одном и том же 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 сами поставите ;)
  • stas © (18.07.08 16:16) [9]
    Anatoly Podgoretsky ©   (18.07.08 15:54) [7]
    stas ©   (18.07.08 14:24) [6]
  • sniknik © (18.07.08 16:30) [10]
    > Указанный селест должен следовать непосредственно после запроса на вставку в одном и том же TADOCommand, и считывать его через _RecordSet,
    > полученный от него:
    вовсе не обязательно мудрить с TADOCommand и _RecordSet -ом.
    что действительно нужно так это общий конект (TADOConnection) у обоих (TADOCommand, TADODataSet) и синхронное выполнение запросов (что по умолчанию), ну и считывать сразу после вставки само собой.
  • ANB (18.07.08 16:42) [11]

    > sniknik ©   (18.07.08 16:30) [10]

    В мс скл не поможет. Там только в одной команде должно идти.

    В аксесс - не знаю.
  • MsGuns © (18.07.08 16:47) [12]
    >sniknik ©   (18.07.08 16:30) [10]
    >вовсе не обязательно мудрить с TADOCommand и _RecordSet -ом.

    Не вижу ничего мудреного. В конце концнв можно написать универсальную функцию и подключить ее к делфе.

    >что действительно нужно так это общий конект (TADOConnection) у обоих (TADOCommand, >TADODataSet) и синхронное выполнение запросов (что по умолчанию), ну и считывать сразу >после вставки само собой.

    Этого может быть недостаточно
  • sniknik © (18.07.08 16:54) [13]
    > В мс скл не поможет.
    а не про mssql разговор.

    > Этого может быть недостаточно
    достаточно с гарантией...
  • stas © (21.07.08 10:38) [14]
    ANB   (18.07.08 16:42) [11]
    в mssql если есть триггер на таблице на insert в другую таблицу, то и в одной команде непоможет, нужно функцию использовать.
  • Anatoly Podgoretsky © (21.07.08 11:06) [15]
    stas ©   (21.07.08 10:38) [14]
    Чукча не читатель!
    Сказали же, что про mssql речь не идет.
  • stas © (21.07.08 12:07) [16]
    Anatoly Podgoretsky ©   (21.07.08 11:06) [15]
    Да знаю я.
    Ну, раз уж затронули mssql....
  • Dmitry S © (22.07.08 15:02) [17]

    > Сказали же, что про mssql речь не идет.

    Сори за офтоп.
    Вот мне интересно, откуда берется множественное число в подобных фразах. Для преувеличения значимости сказанного? Или это попытка манипуляции с помощью общества?
  • Johnmen © (22.07.08 17:36) [18]

    > Dmitry S ©   (22.07.08 15:02) [17]

    В соответствии с нормами русского языка. Ничего более.
    Для тех, кто писатель, не читатель.
  • Нат (29.07.08 11:28) [19]
    Как упоминалось можно найти запись по другим ключам.
    Например,  если есть поле ДатаВремя создания записи - найти свой ИД по нему, но есть моменты со вставкой и поиском.
    Еще можно  Recynс-Requery + bookmark использовать.
    Но это все медленнее.
 
Конференция "Базы" » получить Insert Id после запроса INSERT... [D7, MSAccess via Ado]
Есть новые Нет новых   [134435   +35][b:0][p:0.001]