Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-09-2004
edum edum is offline
Registrado
 
Registrado: ago 2004
Posts: 4
Poder: 0
edum Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 02-09-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Ese comportamiento es correcto, pero......

1.- para que quieres cambiarlo?
2.- si quieres cambiarlo... que motor usas?
Responder Con Cita
  #3  
Antiguo 02-09-2004
edum edum is offline
Registrado
 
Registrado: ago 2004
Posts: 4
Poder: 0
edum Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 02-09-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
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

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
Responder Con Cita
  #5  
Antiguo 02-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #6  
Antiguo 03-09-2004
Jad Jad is offline
Miembro
 
Registrado: sep 2004
Posts: 17
Poder: 0
Jad Va por buen camino
Lightbulb

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.
Responder Con Cita
  #7  
Antiguo 03-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #8  
Antiguo 21-09-2004
FD2004 FD2004 is offline
Miembro
 
Registrado: sep 2004
Posts: 12
Poder: 0
FD2004 Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:27:50.


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
Copyright 1996-2007 Club Delphi