Tengo un error que a veces ocurre y a veces no ...

La cuestion es esta...
Yo en mi bd de Access tengo un id de tipo Numero entero largo con cero como valor predeterminado...
Ese id lo consulto con sql ... y lo que hago es traerme el ultimo ...ok como se ve en el sql
strsql = "SELECT Last(id) AS UltimoReg from tabla"
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& Server.MapPath("bd.mdb")
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open strSQL, oConn,3,1
'este es el ultimo registro le sumo uno
id = RS("UltimoReg")+1
Es decir selecciono el ultimo id de mi bd y luego le sumo uno... ok
es decir haria lo que es un tipo de dato autonumerico...ok pero por ciertas cuestiones lo tuve que hacer asi... y el incremento de id que se hiciera con codigo tipo contador...ok
ese nuevo id... despues lo inserto ..ok
funciona bien ,,, pero a veces falla ...despues de capturar unos 30 registros ... como que el sql confunde el ultimo registro e intenta hacer un duplicado...
me explico.. por que sera?... .. otra forma con sql de seleccionar el utlimo registro para luego sumarle un uno ?