Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemas en Campos de Autoincremento (https://www.clubdelphi.com/foros/showthread.php?t=13891)

edum 02-09-2004 17:04:06

Problemas en Campos de Autoincremento
 
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 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

Cita:

Empezado por Jad
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

Autoincrement
 
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

Saludos, Carlos.


La franja horaria es GMT +2. Ahora son las 13:10:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi