2013-07-29 2 views
5

Мне интересно, как я мог получить последнее генерируемое значение autonumber из таблицы в другой db. В настоящее время я делаю это:Использование @@ Identity

Do Until rsA.EOF 
    'Inserts new row here (works) 
    Set rs = New ADODB.Recordset 
    rs.Open "SELECT @@Identity" (Connection info) 
    SQLcmd = "UPDATE tbl SET col = " & rs("SELECT @@Identity").Value & " 
    (WHERE statement);" 
    DoCmd.RunSQL SQLcmd 
    rsA.MoveNext 
Loop 

Но его присвоение значению 0 вместо вновь созданного автономера. Любая идея почему? Или другой способ сделать это?

+0

См. Http://stackoverflow.com/q/186544/11683 – GSerg

ответ

2

Вы не указали код, который делает INSERT, в другой базе данных. Если для этого используется метод Execute объекта ADO Connection, запустите запрос SELECT @@Identity из этого того же объекта подключения ... не новое соединение с той же строкой соединения. @@Identity можно использовать только в одном сеансе подключения; в противном случае вы получите 0.

И на самом деле вам даже не нужен набор записей для захвата этого значения. Если ваш объект соединения имеет имя conn, это вернет набор записей, но вам не нужно назначать его переменной объекта набора записей. Просто попросите первый элемент из возвращенного набора записей.

Debug.Print "most recent autonumber: " & _ 
    conn.Execute("SELECT @@Identity")(0) 
+1

+1 Ударьте меня в это. Как указано в @HansUp, ключ должен использовать одно и то же * соединение *, а не просто одну и ту же строку соединения. – mwolfe02

+0

Я использую инструкцию SQL INSERT INTO SELECT. Когда я запускаю conn.Execute (...), он возвращает 0. – user2618908

+0

Это не должно быть проблемой, если вы выполняете 'INSERT' из объекта соединения ADO, а вы позже' SELECT @@ Identity' из этого такой же объект соединения. Код в моем ответе был протестирован в Access 2007. Я не показывал 'INSERT', но могу, если это поможет. – HansUp

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