2013-07-29 15 views
5

Mi chiedo come ottenere il valore di autonumber generato più di recente da una tabella in un altro db. Attualmente sto facendo questo:Utilizzo di @@ 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 

Ma dando a col un valore di 0 al posto del nuovo autonumber generato. Qualche idea sul perché? O un altro modo per farlo?

+0

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

risposta

2

Non hai mostrato il codice che fa il INSERT nell'altro database. Se si utilizza il metodo Execute di un oggetto connessione ADO per farlo, eseguire la query SELECT @@Identity da quello stesso oggetto di connessione ... non una nuova connessione con la stessa stringa di connessione. @@Identity è utilizzabile solo nella stessa sessione di connessione; altrimenti otterrai 0.

E in realtà non hai nemmeno bisogno di un recordset per catturare quel valore. Se l'oggetto di connessione è denominato conn, verrà restituito un recordset, ma non è necessario assegnarlo a una variabile dell'oggetto recordset. Basta chiedere il primo oggetto dal recordset restituito.

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

+1 Picchiami. Come afferma @HansUp, la chiave è usare la stessa * connessione *, non semplicemente la stessa stringa di connessione. – mwolfe02

+0

Sto usando un'istruzione SQL INSERT INTO SELECT. Quando eseguo conn.Execute (...) restituisce 0. – user2618908

+0

Questo non dovrebbe essere un problema se stai eseguendo 'INSERT' da un oggetto di connessione ADO, e successivamente 'SELECT @@ Identity' da quello stesso oggetto di connessione. Il codice nella mia risposta è stato testato in Access 2007. Non ho mostrato "INSERT", ma posso farlo se aiuta. – HansUp

Problemi correlati