PDA

Ver la Versión Completa : Problemas en Campos de Autoincremento


edum
02-09-2004, 17:04:06
Tengo un pequeño problemita con los campos de Autoincremento. Haciendo ciertas grabadas de prueba con mi programa, esta campo de autoincremento fue subiendo su valor como corresponde. Pero al borrar los registros, sigue manteniendo el último máximo valor que almacenó. Es decir, si el último valor que grabó fue el 15, aún después de borrar toda la tabla, la 1º inserción la hace con el 16.
Esto es siempre así o se puede corregir este comportamiento???
Gracias y saludos.

__cadetill
02-09-2004, 17:06:50
Ese comportamiento es correcto, pero......

1.- para que quieres cambiarlo?
2.- si quieres cambiarlo... que motor usas?

edum
02-09-2004, 17:52:49
Primero, gracias cadetill por responderme.
Estoy usando el BDE para tablas paradox.
Me gustaría cambiar ese comportamiento para :
1. Me gustaría que en mi cliente empezara a hacer esa numeración a partir del número 1, pero como yo necesito probarlo antes, va a empezar en el siguiente número al que yo terminé en mis pruebas.
2. Quisiera que esa numeración sea lo más consecutiva posible. En mi caso particular, este ID de autoincremento identifica a Pedidos, y si, en caso de borrar algunos pedidos que se cancelen, quisiera que se utilice siempre el nº posterior al último almacenado en la base.
Gracias de nuevo, y saludos.

__cadetill
02-09-2004, 18:20:09
Veamos

Para lo primero se suele tener una copia de las bases siempre limpia, que es la que se da al cliente. No obstante se que es factible lo que pides pero no se cómo :D

Para lo segundo, los pedidos, albaranes, facturas, ..... NO deben de borrarse nunca, como mucho anularlos (otro igual en signo contrario) pero nunca borrarse

De todas manera, a mi los autoinc no me gustan, prefiero tener una tabla de contadores y asignar yo el número que toca. Son maneras de trabajar distintas, ni mejor ni peor, es una alternativa con la que no tendrías estos problemas ;)

roman
02-09-2004, 19:13:26
Desde luego que lo que dice el amigo cadetill es lo que debe hacerse: guardar copias en blanco o- si uno es muy sotisficado -crear rutinas que creen tablas limpias.

Aún así, puedes usar la rutina SetAutoInc (http://www.clubdelphi.com/foros/showpost.php?p=44295&postcount=5) que te permite indicar cuál será el próximo valor del campo autoinc.

// Saludos

Jad
03-09-2004, 01:43:33
Hola Edum,

Si estás usando Paradox mi sugerencia es que evites usar los campos autoincremento. Cuando el equipo se apaga en forma indebida estos campos quedan corruptos y si los usas para índices entonces tendras problemas.

Una forma alterna de tener campos "autoincremento" es que declares un campo de tipo entero y crees un índice para él. Cuando desees usarlo te vas al último registro, tomas el valor del campo y lo incrementas en 1. No olvides usar el FlushBuffers para forzar la grabada.

Saludos.

JAD.

roman
03-09-2004, 02:18:19
Una forma alterna de tener campos "autoincremento" es que declares un campo de tipo entero y crees un índice para él. Cuando desees usarlo te vas al último registro, tomas el valor del campo y lo incrementas en 1. No olvides usar el FlushBuffers para forzar la grabada.


Nada más hay que tener cuidado aquí de bloquear la tabla al momento de guardar el registro ya que mientras una estación está leyendo el valor máximo otras pueden estar haciendo lo mismo con lo que el valor que se intente grabar será incorrecto.

// Saludos

FD2004
21-09-2004, 04:54:22
Son sólo para apps triviales.

te mando este extracto de Liz Woodhouse:

Quote
Autoincrement fields: These fields are good when the sole purpose is to have a unique value. If the value will be used to link tables, if it will have meaning in any way (such as a customer number), if the value must remain the same, don't use an Autoincrement field. Why? Well, there are some problems which make these fields risky: they can 'lose track' of which number they're on; moving data into a copy of the table (for rebuilding the table, or archiving, for example) can reset the field values if you don't do it just right (just right involves restructuring the tables before and after copying or moving data); repairing the table under certain versions of the BDE can lead to the numbers being reset. So, while it's possible to use these fields without ever having a problem, the risk is high and you should be aware of that beforehand.
Unquote

Tienes mucho material sobre este tema en

www.thedbcommunity.com (http://www.thedbcommunity.com)

Saludos, Carlos.