24/07/2005
Uso della variabile @@Identity nei database di Access

Premessa:
L'uso della variabile @@Identity nei database di Access funziona solo con una connessione ADO, l' istruzione *SELECT @@Identity* eseguita per mezzo di DAO rende il valore 0.

L'esempio mostra come inserire nella Tab2 il valore del campo contatore appena aggiunto alla tabella Tab1.

Struttura delle tabelle:
Tab1
----
Id Counter Primary Key,
Nome Text(50)
----

Tab2
----
Id Counter Primary Key,
IdTab1 long references Tab1(Id),
Nome Text(50)
----

Ho voluto introdurre tra l'inserimento della riga in Tab1 e l'inserimento in Tab2 il richiamo di una sub gemella, questo per evidenziare che la variabile @@Identity rende l'ultimo ID inserito nell'ambito della stessa connessione.

Esempio
----------------------------

'*****************************
' Sub Principale
'*****************************
Sub Insert1()

Dim Cn As ADODB.Connection
Dim strSql As String
Set Cn = New ADODB.Connection

Cn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Dati\Db1.Mdb"

'Apro la connessione al database di Access
Cn.Open

'Inserisco una riga nella Tab1
strSql = "INSERT INTO Tab1 (Nome) Values('Insert1')"
Cn.Execute strSql

'Richiamo la sub gemella
Call Insert2

'Inserisco una riga nella Tab2
strSql = "INSERT INTO Tab2 (IdTab1,Nome) Values(@@Identity,'Insert1')"
Cn.Execute strSql

Cn.Close
Set Cn = Nothing

End Sub

'*****************************
' Sub gemella
'*****************************
Sub Insert2()

Dim Cn As ADODB.Connection
Dim strSql As String
Set Cn = New ADODB.Connection

Cn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Dati\Db1.Mdb"

'Apro la connessione al database di Access
Cn.Open

'Inserisco una riga nella Tab1
strSql = "INSERT INTO Tab1 (Nome) Values('Insert2')"
Cn.Execute strSql

'Inserisco una riga nella Tab2
strSql = "INSERT INTO Tab2 (IdTab1,Nome) Values(@@Identity,'Insert2')"
Cn.Execute strSql

Cn.Close
Set Cn = Nothing

End Sub


----------------------------

Eseguendo la Insert1 si ottiene questo Risultato

Tab1
Id   Nome
---- --------
1    Insert1
2    Insert2

Tab2
Id   IdTab1 Nome
---- ------ --------
1    2      Insert2
2    1      Insert1

Come si puņ notare i dati inseriti nelle due tabelle sono coerenti.

Giorgio Rancati

Torna all'indice