Problema con campo ID autonumérico

Señores expertos: Estoy trabajando en Visual Basic 2008, conectado a una base de datos en Access. El programa es de una agenda. Creo un registro nuevo y lo almaceno. Este toma el ID 0 automáticamente. Creo otro registro toma el ID 1, luego el 2 y después el 3. Borro los registros 3, 2 y 1. Solo queda el registro con ID 0. Me salgo de la aplicación
Entro de nuevo al programa, creo un nuevo registro en una caja de Texto donde aparece el valor del ID allí me dice que ese nuevo registro se almacena en el ID 1, pero si voy a la base de datos, el en realidad está almacenado en el ID 4. Y si intento borrar este último registro que acabe de crear me da error de concurrencia
¿Cómo hago para evitar este error de concurrencia?
Agradeciéndoles de antemano su colaboración
Jairo López C
Bogotá - Colombia
Respuesta
1
Un campo autonumérico toma como referencia el ultimo ID registrado y no el valor mayor existente, esto es, si tu ultimo ID registrado fue el 15, el siguiente sera 16, si borras el ID 15 antes de insertar uno nuevo, la tabla no tomara el 14 (mayor valor existente) como referencia, si no el valor del ultimo ID registrado esto es el 15, incluso si manejas transacciones, al realizar un rollback, te encontraras que habrá saltos entre ID's, es mejor que la base de datos maneje los id's autonuméricos en lugar de la aplicación
es decir si la tabla MiTabla, campos id autonumérico, nombre varchar(25) quieres insertar el código seria insert into MiTabla(nombre) values('Jairolop') y devuelvas el ultimo ID insertado al usuario con select MAX(id) as 'Last_ID' from MiTabla
Para manejar esto añade a tu codigo TRY este catch
Catch ex As DBConcurrencyException
<span style="white-space: pre;"> </span>MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message)
Catch ex As Exception
<span style="white-space: pre;"> </span>MessageBox.Show(ex.Message) End Try

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas