powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получение значения AutoNumber добавленной записи
41 сообщений из 41, показаны все 2 страниц
Получение значения AutoNumber добавленной записи
    #32241378
GuDVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавляю запись в таблицу с полем Id(тип AutoNumber) и хочу узнать, как получить значения поля Id добавленной записи?
Использованиt ADO.Record set и Max(Id) нежелательно.
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241388
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что ж... Тогда используй DAO :))
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241407
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы добавляете запись через recordset, то после addnew вы просто можете считать значение поля со счетчиком
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241410
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
CurrentProject.Connection.Execute "INSERT INTO Траты ( [Код Клиента], Сумма ) " _
& "values( 1 , 1000)"
rst.Open "SELECT @@identity as dd", CurrentProject.Connection
MsgBox rst!dd
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241420
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Хам трамвайный
Маленький нюанс - это для SQL Server.
И ещё один - в момент добавления на таблицу "Траты" срабатывает тригер по добавлению записи в другую таблицу - опань-ки - идентити уже не тот:)

2 GuDVin
В аксесе делай селект поля autonumber с критериям для добавленной записи.
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241428
IgorM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Маленький нюанс - это для SQL Server.

Это также работает в mdb с ADO и jet 4

> И ещё один - в момент добавления на таблицу "Траты"
> срабатывает тригер по добавлению записи в другую таблицу
> - опань-ки - идентити уже не тот:)

С этим тоже можно бороться...
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241438
GuDVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Других вариантов нет?
Просто поиск строки с параметрами добавленной строки может не всегда привести к нужному результату (если есть строки отличающиеся только Id'ом). И MAX не всегда помогает(если запрос на добавление не выполнился)
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241443
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 IgorM
Про mdb честно говоря не знал.
Про бороться-то в курес - есть несколько способов (на этом сайте в FAQ кажется описан) - просто решил, что стоит об этом написать:)
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241447
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To GuDVin
Я вроде сказал другой вариант
...
rs.AddNew
Debug.Print rs!id
...
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241482
GuDVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, но хотелось обойтись без ADO. Впрочем, вариант интересный... Спасибо...
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241494
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вариант Serge Gavrilov работает и в DAO.
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241503
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в DAO rs.AddNew никто не отменял
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241511
GuDVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по тому, что решение, типа одна строка с какой-нить функцией никто не предлагает, видимо и нет такого счастья...
Все спасибо... Будем юзать ADO.
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241520
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поиск строки с параметрами добавленной строки может не всегда привести к нужному результату (если есть строки отличающиеся только Id'ом).

сам себе ответил
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241527
GuDVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это как же?

Скорее вопрос поставил...
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241983
iska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если

>> GuDVin: Использованиt ADO.Record set и Max(Id) нежелательно

то может быть поможет Last(Id)? Она вроде для того и заточена. Попробовал, работает и при добавлении через запрос и через rst.AddNew...
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32241993
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Last плох по двум причинам:

1. В таблице без order by - порядок сортировки не гарантирован. Тогда уже лучше Max.

2. За время от добавки записи до получения Last (или Max) другой юзер может создать еще одну запись, и тогда будет получен его ID, а не наш.
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242005
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
значит перд инсертом блокировать таблицу
инсерт
вопрошать
разблокировать
но.... если есть строки отличающиеся только Id'ом то только через рекордсет
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242023
iska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Владимир Саныч:

1. А функции Last не по барабану порядок сортировки? Она выбирает последнюю запись в хронолическом порядке.
Хэлп:
You use the First or Last functions to return the first or last record in the group you are performing calculations on. These functions return the first or last record as it was entered in chronological order. Sorting the records has no effect on these functions.
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242034
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
You can use the DFirst and DLast functions to return a random record from a particular field in a table or query when you simply need any value from that field. Use the DFirst and DLast functions in a in a macro, module, query expression, or calculated control on a form or report.
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242045
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это я погорячилась наверное
может Last в запросе таки правильно работает в отличии от DLast

вопрос: зачем плодить записи которые отличаются только AutoNumberом?
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242087
iska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 TatianaT

Абстрагируясь от вопроса о том, зачем это нужно...

Я попробовал поиграть с Last в запросе и DLast из кода - результат одинаковый, обе функции всегда возвращают данные из последней добавленной записи.

А зачем, решать не мне :-)
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242107
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а на каком количестве записей игрался? И в каком Акксесе?
а вот это
You can use the DFirst and DLast functions to return a random record from a particular field in a table or query when you simply need any value from that field. Use the DFirst and DLast functions in a in a macro, module, query expression, or calculated control on a form or report.
взято из хелпа А97

я такое дело очень давно наблюдала в А97 на больших обьёмах и когда записи
не подряд а в разнобой были
а с Last вроде проблем не было


а вопрос зачем плодить записи которые отличаются только AutoNumberом?
был для автора топика
хотя разные ситуации бывают
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242119
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Hummer

для SQL есть @@Identy (если я правильно написал)

а для трггеров применени здесь очень хорошо описано у Senin(a)

поищи по-моему тебе будет в тему
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242152
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 iska:\r
/topic/58
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242167
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот и я о том же
Саныч это был А97 ? и таблица в А97 ?
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242173
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Там, где две строки попали не на свое место, это был Access 2. :^)
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242262
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 вадя
Я в курсе, что для SQL есть @@identity (именно так и пишется, других не знаю) - но в простом мдб на аксесовских табличках это работать не будет - чего, впрочем, никто и не обещал:)
Про тригеры тоже в курсе - как потом и написал, что примеры есть - просто мой ответ это только уточнение к ответу Хам трамвайный.
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242519
iska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Владимир Саныч и TatianaT

Мы, по-моему, о разном говорим...
Я полностью согласен с вами по поводу первичных ключей, сортировки, отсутствия сортировки и т.п.
Разговор только о получении значения из одной (!) последней (по времени)добавленной и незатертой записи, для чего и служит функция Last.
С утра почитал ваши посты. Чтобы подтвердить свою точку зрения:
Забил в цикле в таблицу 100000 записей.
Стирал, добавлял записи, удалял из добавленных и добавлял на их место.
Запрос (SELECT Last(Id) FROM T) ВСЕГДА возвращает значение Id из последней добавленной записи.
Ну такое назначение у функций First и Last.
Если есть пример, когда ф-ция Last не возвращает значение из последней записи, был бы рад получить описание такой ситуации.
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242538
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.При работе через ADO можно использовать @@identity для табличек в mdb
2.Все равно работа через рекордсет - самый быстрый вариант
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242540
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
повторяю
в каком Акксесе эксперементировал?
я такое дело очень давно (2,5 года назад) наблюдала в А97 с DLast
на больших обьёмах и когда записи
не подряд а в разнобой были
а с Last вроде проблем не было (не помню просто насчёт Last т.к мне нужно было узнавать из кода, а из кода только DLast)

а вот это
You can use the DFirst and DLast functions to return a random record from a particular field in a table or query when you simply need any value from that field. Use the DFirst and DLast functions in a in a macro, module, query expression, or calculated control on a form or report.
взято из хелпа А97
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242551
Фотография Артист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Hummer
Я в курсе, что для SQL есть @@identity (именно так и пишется, других не знаю) - но в простом мдб на аксесовских табличках это работать не будет

это будет работать, будет...
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242561
iska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аcc 02, про DLast я и не обмолвился. Нечего обсуждать.
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242588
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Артист
Был не прав. Дважды не прав - проверял в DAO - возвращает 0, в ADO - всё работает.
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32242769
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Из хелпа:

The First and Last functions are analogous to the MoveFirst and MoveLast methods of a DAO Recordset object. They simply return the value of a specified field in the first or last record, respectively, of the result set returned by a query. Because records are usually returned in no particular order (unless the query includes an ORDER BY clause), the records returned by these functions will be arbitrary.
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32243104
iska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже, я понял, откуда у нашего спора ноги растут...

MORE INFORMATION
The Remarks section of the Help File topic, "First, Last Functions" incorrectly states that unless the query includes and ORDER BY clause, the order of records returned will be arbitrary . The correct information is that the order of records returned by the First() and Last() functions is not affected by the ORDER BY clause .
Источник:
support.microsoft.com/default.aspx?scid=kb;en-us;189391
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32243110
iska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там же:

The First(), Last(), DFirst(), and DLast() functions ignore sort orders and indexes, and primary keys. These functions are intended to return data from the first or last undeleted record entered into the table , not from the first or last record in a given sort order.
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32243149
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Признаю свою неправоту.

Сделал два запроса.

SELECT s FROM a ORDER BY s;

five
four
one
three
two

SELECT Last(s) AS LastOfs FROM b;

five

Люди, пользоваться First и Last опасно, они игнорируют ORDER BY!
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32243154
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Но!!! По-прежнему остается проблема с другим юзером, который мог тем временем добавить другую запись (или стереть нашу).
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32258128
Фотография Артист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так всётаки по варианту, например который Хам привёл:
Код: plaintext
1.
2.
3.
4.
5.
Dim rst As ADODB.Recordset 
Set rst = New ADODB.Recordset 
CurrentProject.Connection.Execute  "INSERT INTO Траты ( [Код Клиента], Сумма ) "  _ 
&  "values( 1  ,  1000 )" 
rst.Open  "SELECT @@identity as dd" , CurrentProject.Connection 
MsgBox rst!dd

если в многопользовательской базе, то ошибётся @@identity при одновременном INSERTе другого юзера, или она умна, чтоб вернуть тока из своего Connection ??
Ну а как вы предложите при вставке нескольких записей возвратить их несколько ID ??
...
Рейтинг: 0 / 0
Получение значения AutoNumber добавленной записи
    #32258188
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если в многопользовательской базе, то ошибётся @@identity при одновременном INSERTе другого юзера, или она умна, чтоб вернуть тока из своего Connection ??
Только из своего.
Ну а как вы предложите при вставке нескольких записей возвратить их несколько ID ??
Я предложу операции вставки проводить через Recordset. Если, конечно, речь идет о mdb.
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получение значения AutoNumber добавленной записи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]