2013-07-29 14 views
5

Ich frage mich, wie ich den zuletzt generierten Autowert-Wert aus einer Tabelle in einer anderen Datenbank abrufen konnte. Momentan mache ich das:Verwenden von @@ Identität

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 

Aber es gibt Col einen Wert von 0 anstelle der neu generierten Autonummer. Irgendeine Idee warum? Oder eine andere Möglichkeit, dies zu tun?

+0

Siehe http://stackoverflow.com/q/186544/11683 – GSerg

Antwort

2

Sie haben den Code, der die INSERT in die andere Datenbank tut, nicht angezeigt. Wenn Sie die Execute-Methode eines ADO Connection-Objekts dazu verwenden, führen Sie die SELECT @@Identity-Abfrage von diesem gleichen Verbindungsobjekt ... keine neue Verbindung mit der gleichen Verbindungszeichenfolge. @@Identity ist nur innerhalb derselben Verbindungssitzung verwendbar; Andernfalls erhalten Sie 0.

Und eigentlich brauchen Sie nicht einmal ein Recordset, um diesen Wert zu erfassen. Wenn Ihr Verbindungsobjekt benannt wird, wird ein Re-Cord-Set zurückgegeben, aber Sie müssen es einer Re-Cord-Set-Objektvariablen nicht zuweisen. Fragen Sie einfach nach dem ersten Element aus dem zurückgegebenen Recordset.

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

+1, um es Schlag mich. Wie @HansUp angibt, besteht der Schlüssel darin, dieselbe * Verbindung * zu verwenden, nicht einfach die gleiche Verbindungszeichenfolge. – mwolfe02

+0

Ich verwende eine SQL INSERT INTO SELECT-Anweisung. Wenn ich conn.Execute (...) ausführen, gibt es 0 zurück. – user2618908

+0

Das sollte kein Problem sein, wenn Sie das 'INSERT' von einem ADO-Verbindungsobjekt ausführen, und Sie später' SELECT @@ Identity' daraus Gleiches Verbindungsobjekt. Der Code in meiner Antwort wurde in Access 2007 getestet. Ich habe den 'INSERT' nicht angezeigt, aber ich kann, wenn es hilft. – HansUp

Verwandte Themen