Estimado: En todos los gestores de base de datos ese problema con los 
auto-incrementales existe y no es solucionable.Por qué?Muy simple, cuando vos 
agregas un registro con el append blank (o aún con INSERT INTO) el sistema 
asigna un registro al autoincremental a tu programa, y como es multiusuario 
queda listo para asignar otro número a otra "conexión", por lo tanto, si 
cancelas, el sistema no puede revertir la numeración y va siempre para 
adelante.EjemploUsuario A --> APPEND BLANK (INSERT INTO...) en instante 1. le 
asigna número N.Usuario B --> idem (en instante 2) le asigna número N + 
1Usuario B --> COMMIT (o equivalente) (en instante 3)Usuario A --> cancela en 
instante 4.El sistema está preparado para entregar el siguiente autoincremental 
como N+2, por lo que es imposible recuperar el valor N.La idea de los 
autoincrementales es que son números internos, que te permiten contar con 
claves primarias automáticas cuando no puedes generar una clave primaria 
natural.Nunca se debe asociar una clave autoincremental a un número que el 
usuario use como referencia en documentos externos (por ejemplo, número de 
cliente, legajo personal, número de factura) porque será imposible mantener 
secuencias sin "agujeros" en la numeración.Las claves auto-incrementales además 
son un dolor de cabeza cuando tienes que unificar tablas de diferentes bases 
diferentes.Por ejemplo dos empresas usan un sistema donde identifica los 
clientes con una clave primaria auto-incremental. Esa clave se relaciona con 
facturas, pedidos, remitos, etc. Al intentar unir los clientes, ambos van a 
tener el mismo número cliente para distintos clientes y hasta distintos números 
de cliente para el mismo cliente (porque se incorporaron a la cartera de 
clientes en diferente momento).Cualquier cambio en los números de cliente para 
compatibilizar los orígenes de datos, implica disparar cambios en las tablas 
relacionadas.En otros foros la conveniencia o no de usar autoincrementales vs 
naturales han sido del tipo "index war".En mi caso uso claves naturales. Cuando 
no tengo naturales uso un empaquetado de red-usuario-dia-hora..milisegundos que 
meto en un bigint (en fox podes usar para eso un currency), con esta última 
opción solo tienes superposición si coincide que en las tablas a unir dos 
registros se agregaron con nombres de máquina y usuario iguales, y además en el 
mismo instante (fecha, hora y milisegundo).Saludos: Miguel, Santa Rosa (LP)
    El sábado, 4 de noviembre de 2017 22:33:56 ART, Norberto Mario Alvarez 
<[email protected]> escribió:  
 
 <!--#yiv0808413900 _filtered #yiv0808413900 {font-family:"Cambria 
Math";panose-1:2 4 5 3 5 4 6 3 2 4;} _filtered #yiv0808413900 
{font-family:Calibri;panose-1:2 15 5 2 2 2 4 3 2 4;}#yiv0808413900 
#yiv0808413900 p.yiv0808413900MsoNormal, #yiv0808413900 
li.yiv0808413900MsoNormal, #yiv0808413900 div.yiv0808413900MsoNormal 
{margin:0cm;margin-bottom:.0001pt;font-size:11.0pt;font-family:"Calibri", 
sans-serif;}#yiv0808413900 a:link, #yiv0808413900 
span.yiv0808413900MsoHyperlink 
{color:#0563C1;text-decoration:underline;}#yiv0808413900 a:visited, 
#yiv0808413900 span.yiv0808413900MsoHyperlinkFollowed 
{color:#954F72;text-decoration:underline;}#yiv0808413900 
span.yiv0808413900EstiloCorreo17 {font-family:"Calibri", 
sans-serif;color:windowtext;}#yiv0808413900 .yiv0808413900MsoChpDefault 
{font-family:"Calibri", sans-serif;} _filtered #yiv0808413900 {margin:70.85pt 
3.0cm 70.85pt 3.0cm;}#yiv0808413900 div.yiv0808413900WordSection1 {}-->
Estimados colisteros, me sucede lo siguiente:

Cuando hago un append blank en una tabla con un campo Autoinc, por ejemplo me 
pone el valor 5, y si me arrepiento y hago un tablerevert, al hacer un nuevo 
append blank, toma el valor 6.

Hay alguna manera de que tome el valor siguiente, en este caso 5, o tengo que 
hacerlo por las mias, por ejemplo max del campo + 1.

Desde ya muchas gracias.

  

  

  

  

Norberto Alvarez

Socio # 1882

  
  

Responder a