powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
11 сообщений из 11, страница 1 из 1
Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
    #32164554
Фотография Groove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
...
Рейтинг: 0 / 0
Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
    #32164568
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если можеш определить набор полей, которые уникально определяют запись, то посылай запрос, включив эти поля в WHERE.
...
Рейтинг: 0 / 0
Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
    #32164589
rock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если это identity,тогда можно с помощью @@Identity
...
Рейтинг: 0 / 0
Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
    #32164597
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 rock


В Access??? 8-)
...
Рейтинг: 0 / 0
Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
    #32164614
Фотография Groove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2pkarklin не могу
2rock точно identity
...
Рейтинг: 0 / 0
Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
    #32164630
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не могу

Ну а как подругому ты сам подумай? На маскимум закладываться нельзя (другой пользователь может вклиниться между запросом на вставку и на выбор максимального значения счетчика), если тока запрос на вставку записи и запрос на выборку максимального значения счетчика в транзакцию завернуть...
...
Рейтинг: 0 / 0
Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
    #32164647
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
1) Можно вставлять записи при помощи ХП - и возвращать ID.
2) Добавить пару полей в таблицу, однозначно идентифицирующих запись (без помощи ID - например, дату/время и имя машины клиента) - и по этим данным искать.
...
Рейтинг: 0 / 0
Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
    #32164698
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 eNose

Ты тоже, как rock, не проснулся. :-) У автора Access, а не сиквел.
...
Рейтинг: 0 / 0
Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
    #32164703
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Я думал, что Access не настолько ущербный
...
Рейтинг: 0 / 0
Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
    #32164854
Фотография Groove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот что я нашел


Окончательно обессилив в борьбе с ошибкой в проекте Access'a 2000 "Данные, добавленные в базу данных, не будут отображены в форме, так как они противоречат условиям на базовый источник записей" при вставке записи в таблицу с ключевым полем Identity и триггером On Insert, добавляющим записиии в другую таблицу с ключевым (или не ключевым) полем Identity я решил заглянуть в корень проблемы. Итак:
При работе с SQL сервером через ODBC такой проблемы не возникает, следовательно запускаем ODBC Trace и изучаем вызовы ODBC функций. И вот какая интересная штука - сразу после вставки записи, до COMMIT одна из функций запрашивает @@Identity. (Для тех кто не знает @@Identity это системная переменная (или функция(?)) которая содержит значение последнего поля Identity, сгенерированного при вставке записи). Снова начал эксперементировать с OLE DB Provider for MSSQL, и вскоре выяснил, что этот самый провайдер возвращает Access'у значение @@Identity после Commit, когда @@Identity в результате работы триггера уже приняло значение отличное от значения в поле.
Это со стороны Microsoft безусловно Глюк и баг !!! Но как-то нужно выкручиваться. И вот что мне пришло в голову: Если отказаться от Identity Вообще, то неизбежно возникнет проблема создания уникального значения для ключевого поля. В однопользовательской среде это, собственно, и не проблема -бери MAX от значений поля, наращивай на 1 и всавляй. Но вот в многопользовательской среде это, во первых, замедлит работу и вызовет нежелательную блокировку таблицы, а во вторых может привести к нарушению уникальности ключа из-за попытки одновременно вставить запись разными пользователями. Но есть замечательная штука - uniqueidentifier. Используя его в качестве ключевого поля проблему удалось решить). Но не всем и далеко не всегда удобно и необходимо использовать uniqueidentifier, к тому же сортировка по полю этого типа невозможна (хотя эти проблемы обойти легко). Напрашивался вывод: нужно заставить вернуть @@Identity нужное Access'y значение. Мне удалось найти только один способ (да простят меня знатоки T-SQL за глумление над полезными операторами !)

В начале триггера/процедуры
Declare @Idt As int, @SqlStr As Varchar(100)
Set @Idt = @@Identity
...

В конце триггера/процедуры
Set @SqlStr = 'Select Identity (Int, ' + Cast(@Idt As Varchar(10)) + ', 1) As id Into #Tmp'
Execute (@SqlStr)

С наилучшими пожеланиями
Павел Жидков
Программист вечно работающий не по специальности.
...
Рейтинг: 0 / 0
Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
    #32164957
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То что ты нашел каксается сиквела. Да и кривых рук программера. В 7 версии были небольшие заморочки identity, но в 2000 версии все ок.

Тока у тебя же Access и все что ты нашел к делу не относиться.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как получить ID только что вставленной записи (Delphi6+ADO+MS ACCESS)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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