2011-12-16 2 views
0

Я вставляю данные из своего приложения vb.net в msaccess db.Как получить последнюю вставленную запись в запросе msaccess

Я запутался, чтобы получить последнюю вставленную запись, добавленную в таблицу. В MS-SQL мы получаем @@ IDENTITY, но это не сработало для меня в MSAccess.

так что должно быть сделано для получения последней вставленной записи, добавленной в таблицу?

+0

Что значит не работает? Если вы создаете объект и выполняете запрос на него, вы можете использовать идентификатор @@. http://stackoverflow.com/questions/2082427/how-to-retrieve-last-autoincremented-value-in-ms-access-like-identity-in-sql-s, http://stackoverflow.com/questions/ 5942781/select-identity-not-scoped-by-db-object и т. Д. – Fionnuala

ответ

6

Пример:

Dim db As Database 
Set db = CurrentDb 

db.Execute "INSERT INTO Table1 (atext) Values('abc')", dbFailOnError 

Dim rs As dao.Recordset 

Set rs = db.OpenRecordset("select @@identity") 
Debug.Print rs(0) 

Это требует, что есть ключ автоинкремент на столе.

-1

Всегда полезно иметь цифровой (даже автоинкремент) первичный ключ. Затем вы всегда можете выбрать MAX, и это последняя вставленная запись.

+0

hmm звучит интересно ... но что, если два пользователя вставляют записи одновременно перед запуском оператора select ... – KoolKabin

+0

Вы не можете зависеть от первичного ключа с автоматическим приращением, чтобы быть чем-то уникальным, если порядок важен, вам нужно создать свой а затем вы занимаетесь всевозможной интересной работой для нескольких пользователей. – Fionnuala

+0

@KoolKabin: Сохраните имя пользователя, создавшего запись, чтобы вы могли получить MAX, где «созданный» равен текущему пользователю. Не идеально, но лучше. Идеальным решением было бы перейти на SQL Server Express (это бесплатно). – HardCode

0

Это сложнее в доступе, чем в SQL Server, поскольку доступ не поддерживает выполнение нескольких операторов в пакетном или выходном параметрах.

В соответствии с MSDN documentation вам необходимо добавить обработчик для события RowUpdated.

Прежде чем приступать к этому, я бы попытался обернуть ваш код вставки в транзакцию и затем выполнить метод select @@ identity в транзакции. Не может работать, но стоит того.

+0

Вам не нужно использовать транзакцию.До тех пор, пока вы используете один и тот же объект соединения, вы получаете последний вставленный идентификатор, используя @@ identity –

0

Насколько я знаю, MS Access не имеет функций, чтобы получить последнюю добавленную строку.

На практике я создаю столбец автоинкремента (обычно это первичный ключ). Затем я запускаю этот запрос, когда я хочу, чтобы получить последнюю строку в таблице:

SELECT TOP 1 * FROM [Table] ORDER BY [IdColumn] DESC 

Это просто сортирует строки в таблице в колонке ID в обратном порядке и принимает первый (который на самом деле последняя строка в таблице).

+0

Доступ поддерживает использование идентификатора @@. Таким образом, опубликованное решение использования select @@ identity работает отлично. Так что да, эта функция встроена, и ваш ответ неверен. –

Смежные вопросы