Esa es una de las razones por las cuales los campos autoincrementales se 
deberían utilizar solamente como claves primarias surrogadas. Si por ejemplo 
las usamos para generar números de facturas (que deberían coincidir con el 
número del formulario preimpreso), en caso de error o de que, como dice 
Antonio, alguien grabe antes que vos, se te puede armar una galleta infernal.

Deberías considerarlas equivalentes a un número de registro. Pero a diferencia 
de recno(), que te da el número de registro y permanece constante a menos que 
borres algunos registros y le hagas un pack a la tabla, dicho número es 
absolutamente independiente del número de registro. En otras palabras, si tenés 
una tablita con 10 registros y borrás el último, por ejemplo, le hacés un pack 
y después agregás otro registro, dicho nuevo registro va a tener el número 10 
de recno(), pero en el caso de la clave autoincremental va a tener el 11. Si 
vos hubieras basado tu lógica en el recno() tendrías un resultado que no es el 
correcto. En cambio, con el número autoincremental podés borrar todos los 
registros que quieras, pero el registro siempre conserva su identidad 
inalterable. Las relaciones entre tablas no se te modifican, en fin......

Rafael Copquin


  ----- Original Message ----- 
  From: Antonio M. Castaño 
  To: GUFA List Member 
  Sent: Wednesday, November 25, 2009 8:27 PM
  Subject: [GUFA] Campo Autoincremental


  Hola Norberto:

  Es así. Es lo que hacen todos los motores de base de datos. Cuando vos hacés 
el append te "reserva" el número siguiente de el campo autoncremental. Hace 
eso, porque en ese mismo momento, alguien podría estar haciendo otro append. Si 
no tiene reservado una para vos, qué número le asignaría si el otro graba 
primero?. Lo que te garantiza el motor es que sean todos diferentes. NO que 
sean consecutivos.

  Si necesitás un campos incremental, todos consecutivos, lo tenés que manejar 
de otra manera, con lógica programada por vos.

  Saludos!

Responder a