Uso della variabile @@Identity nei database di Access PDF Stampa E-mail
Scritto da Giorgio Rancati   
Domenica 24 Luglio 2005 00:00

Premessa:
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.