Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как узнать ID новой вставленной записи  [new]
msleg
Member

Откуда: Москва
Сообщений: 563
Добрый день! Добавляю запись в таблицу на сервере SQL SERVER через recordset, в которой есть ключевое поле identity increment (счетчик):

cnn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=OLAP_DWH_DEV;Data Source=wruistb008"
            cnn.Open

            rst.Open sqlquery, cnn, adOpenStatic, adLockOptimistic
            
            rst.AddNew
            rst.Fields("Date_start_promo").Value = Date
            ...
            rst.Update

            ID = rst.Fields("ID_Promo").Value



Проблема в том, что ID пусто, такое ощущение, что сервер код добавил в запись, а в recordset не обновил данные(
Пробывал
rst.requery - записи обовляются, но rst перепрыгивает на 1-ую запись.
29 май 15, 15:44    [17707307]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID новой вставленной записи  [new]
zasandator
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 4887
msleg,

declare @tbl table (id int identity)

insert @tbl default values
insert @tbl default values
insert @tbl default values
insert @tbl default values

-- сразу после вставки функция scope_identity() возвратит последнее значение автоинкремента
declare @id int = scope_identity()

select @id

select * from @tbl
29 май 15, 15:47    [17707326]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID новой вставленной записи  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
msleg
Проблема в том, что ID пусто, такое ощущение, что сервер код добавил в запись, а в recordset не обновил данные
Так какой код то, что в sqlquery? Видимо, просто ваш код, который вы написали, не возвращает ID?

А вообще этот вопрос нужно задавать в форуме про программированию на VB, сиквел к этому никак не относится.
29 май 15, 15:50    [17707345]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID новой вставленной записи  [new]
msleg
Member

Откуда: Москва
Сообщений: 563
alexeyvg,

Наверно вы правы, надо в VB написать
29 май 15, 15:53    [17707363]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID новой вставленной записи  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
msleg
в которой есть ключевое поле identity increment (счетчик):
Мне почему-то кажется, что нет у этого поля свойства IDENTITY.
29 май 15, 16:08    [17707442]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID новой вставленной записи  [new]
msleg
Member

Откуда: Москва
Сообщений: 563
iap,

Точно все есть! если я на сервере добавляю записи, добавляется автоматически номер
29 май 15, 16:12    [17707460]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID новой вставленной записи  [new]
Glory
Member

Откуда:
Сообщений: 104760
msleg
если я на сервере добавляю записи, добавляется автоматически номер

Это еще не гарантия наличия поля identity
29 май 15, 16:15    [17707481]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать ID новой вставленной записи  [new]
msleg
Member

Откуда: Москва
Сообщений: 563
Спасибо, всем за помошь, у меня сработало следующим образом (UpdateBatch. adLockBatchOptimistic. adUserClient)

            cnn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=OLAP_DWH_DEV;Data Source=wruistb008"
            cnn.CursorLocation = adUseClient
            cnn.Open
            
            rst.Open sqlquery, cnn, adOpenStatic, adLockBatchOptimistic
            rst.AddNew
            rst.Fields("Date_start_promo").Value = Date
            ...
            rst.Update
            rst.UpdateBatch

            ID = rst.Fields("ID_Promo").Value
31 май 15, 10:29    [17711884]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить