Not it Jet ;-) SQL Server BOL describes @@IDENTITY as a *function*. A
user cannot explicitly change the value returned by @@IDENTITY, even
via a trigger. I guess you mean that a T-SQL statement may cause a
trigger to fire that may cause an further IDENTITY value to be
generated
Note that in Jet a single SQL statement can cause multiple IDENTITY
values to be generated across multiple tables and (I guess) @@IDENTITY
will return the most recent (transaction time) generated value e.g.
Sub mainer()
Kill Environ$("temp") & "\DropMe.mdb"
Dim cat
Set cat = CreateObject("ADOX.Catalog")
With cat
..Create _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & _
Environ$("temp") & "\DropMe.mdb"
With .ActiveConnection
Dim sql As String
sql = _
"CREATE TABLE Test1 (" & vbCr & "ID1 INTEGER" & _
" IDENTITY(1, 1) NOT NULL UNIQUE," & _
" " & vbCr & "f1 INTEGER)"
..Execute sql
sql = _
"CREATE TABLE Test2 (" & vbCr & "test1_ID1" & _
" INTEGER NOT NULL REFERENCES Test1" & _
" (ID1), " & vbCr & "ID2 IDENTITY(300, 3)" & _
" NOT NULL UNIQUE, " & vbCr & "f2 INTEGER)"
..Execute sql
sql = _
"CREATE VIEW Test1Test2" & vbCr & "(ID1, f1," & _
" Test1_ID1, ID2, f2)" & vbCr & "AS " & vbCr & "SELECT" & _
" Test1.ID1, Test1.f1, Test2.Test1_ID1," & _
" Test2.ID2, Test2.f2" & vbCr & "FROM Test1" & vbCr & "INNER" & _
" JOIN Test2" & vbCr & "ON Test1.ID1 = Test2.Test1_ID1"
..Execute sql
sql = _
"INSERT INTO Test1Test2 (f1, f2)" & _
" VALUES (1, 1)"
..Execute sql
Dim rs
Set rs = .Execute( _
"SELECT @@IDENTITY;")
MsgBox rs.GetString
End With
Set .ActiveConnection = Nothing
End With
End Sub
PS Out of curiosity I changed the query to
SELECT @@IDENTITY, * FROM Test1Test2;
and got the very impressive error message, "Catastrophic failure" <g>.
Jamie.
--