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