FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Como genero claves secuenciales
Hola, lo que trato de hacer es generar automaticamente una clave, basado en incrementos, es decir abro mi tabla clientes y con la funcion recordcount, me cuenta cuantos registros tengo, y yo le sumo 1, pero el caso, es que el rango de valores debe de ir de 000001 a 999999.
Si tengo 1 registro seria: 000001 Si tengo 10 registros: 000010 Si tengo 100 registros: 000100 .. .. .. Cómo le puedo hacer para que me de esta secuencia?? Gracias por su colaboracion |
#2
|
||||
|
||||
Hola Lizette,
¿Es necesario que la clave cuente con ese formato? ¿Digo, es un requisito que tenga esos ceros a la izquierda? Muchos motores de base de datos tienen un tipo autoincremental. Te preguntaba si es necesario ese formato precisamente por esto, si se emplean este tipo obtendrás, 1, 1543, 545, etc. Es decir, sin los ceros. Necesitamos saber que motor usas para saberte ayudar. Saludos, |
#3
|
|||
|
|||
estoy usando MySql con ODBC
El caso, es que esa clave debe de ser de 6 digitos, y no se debe de repetir..
Es por ello el formato que puse, o que otra solucion puedo tomar, para que no se repita y sea de 6 digitos? |
#4
|
||||
|
||||
Hola Lizette, si utilizas un campo autoincremental tu clave no se va a repetir, pero no tendra los ceros a izquierda, sino sera 1,2,3,4,5......, como te ha explicado el amigo Marcelo.
Para rellenar ceros a la izquierda, lo puedes hacer así:
claro que tu campo tendría que ser de tipo Varchar. Si utilizas el campo autoincremental, se almacenara como te digo pero para mostrar puedes utilizar la propiedad DisplayFormat de tu campo. Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar. |
#5
|
||||
|
||||
Creo que deberías tener una tabla de contadores.
Por ejemplo una con los campos: NOMBRE_TABLA string CONTADOR integer Al momento de insertar un nuevo registro, lees de la tabla de contadores el contador que corresponda, lo incrementas, le das el formato de 6 digitos y lo utilizas. La opción de utilizar la cantidad de elementos de la tabla no es muy fiable, por lo siguiente: Añades 10 elementos. - Se numeran del 000001 al 000010 Borras un elemento. - Supongamos el 000005 Añades un elemento nuevo - La cantidad es 9 elementos. El que añades es el 10mo. El identificador será nuevamente 000010 (duplicado!) |
#6
|
||||
|
||||
Es una mala, mala idea tener como campos claves CUALQUIER tipo de codigos.
Un campo clave solo debe ser de 2 tipos, y ya: Un autoincremental o un GUID. Si necesitas un codigo por razones del usuario o de identificacion mas "humana" esta bien, pero debes analizar si la razon del codigo es una representacion humana o una imitacion innecesaria de una clave interna del sistema. Si solo se requiere para identificar un registro, un autonumerico es mas que suficiente.
__________________
El malabarista. |
#7
|
||||
|
||||
Me parece que la idea de caro es bastante buena y simple, contar con un campo autoincremental y emplear DisplayFormat para visualizarlo con los ceros.
Esto permite facilitar las consultas, se evita el tener que estar analizando dentro de strings (subcadenas) y en ciertas ocasiones unos molestos casts o moldeos de tipos. Por otro lado, si el motor no soporta este tipo de campo la recomendación es duilioisola es más que recomendable. Combinando esta alternativa con la técnica de DisplayFormat se pueden conseguir buenos resultados. Saludos, |
#8
|
|||
|
|||
Es verdad, es muy buena tu respuesta Caro, pero lo que dice duilioisola es muy cierto y no habia pensado en ello (gracias por ese comentario), las claves se pueden repetir, si tengo 10 elementos, el ultimo es 10 y elimino uno, el proximo que me genere sera 10 otra vez..
Caro, tu idea la puedo implementar para completar los 6 digitos, pero utilizando otro medio para generar las claves, no el autoincremento.. Pero qué otra cosa puedo utilizar para que esa clave se genere automaticamente y no se repita? |
#9
|
||||
|
||||
Cita:
Si eliminas un campo de tu tabla no importa, en CONTADORES seguirá estando el próximo valor. Cita:
Por otro lado, ¿MySQL no tiene un tipo autoincremental? Desconozco MySQL. El empleo de un campo de este tipo no se vé afectado por el borrado, continuará generando el siguiente que le corresponde. Cita:
Disculpame que lo diga pero me parece que te estás ahogando en un vaso de agua. O hay algo que se nos escapa o se te escapa a ti. Si nos aportaras más detalles de tu situación te podríamos aportar alternativas y soluciones. Saludos, |
#10
|
||||
|
||||
Cita:
Si lo que quieres generar son números distintos siempre, la herramienta correcta son los generadores. También puedes usar un: Pero esto tiene el problema de funcionamiento en red, cuando dos usuarios distintos quieren crear un cliente, a ambos se le da el mismo número. O sea, según lo que has pedido: tabla contadores y punto en boca. Lizette, te sugiero leas la guía de estilo, entre otras cosas se dice que te tomes el tiempo necesario para formular tu pregunta. Si en el primer mensaje hubieras explicado todas tus necesidades y herramientas que usabas, probablemente la primera respuesta (hace 11 horas) hubiera sido "la solución". Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#11
|
|||
|
|||
Jejeje gracias Delphius, haré lo de la tabla temporal..
Eso es lo que queria, solo que me generara el numero para convertirlo a 6 digitos.. Gracias por su aportación! |
#12
|
||||
|
||||
Cita:
|
#13
|
||||
|
||||
Cita:
Esto considerando que la transacción usada para el guardado no demore más tiempo de lo que se requiere para insertar un registro y sus posibles detalles en la base de datos. Comento esto último porque, de otra forma, el segundo usuario podría verse obligado a esperar una cantidad de tiempo considerable (ya sea por bloqueo de la primera transacción o por no estar "visible" aún el nuevo valor máximo). Saludos. Al González. Última edición por Al González fecha: 31-10-2008 a las 20:46:42. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
como genero una numeracion en QuickReport ...?¿ | marcelinux | Varios | 1 | 12-09-2007 00:48:30 |
¿Cómo genero un informe en Word? | EveElgrande | Internet | 3 | 25-07-2006 15:46:54 |
COmo genero un mensaje antes de un Sysutils.Abort | Bitbanner | Conexión con bases de datos | 19 | 16-02-2005 17:41:58 |
ToolBar como Genero una | mtpedro | Conexión con bases de datos | 2 | 29-10-2004 16:14:01 |
Numero secuenciales | lafirma | Firebird e Interbase | 9 | 25-11-2003 22:06:30 |
|