Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-10-2008
Lizette Lizette is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Lizette Va por buen camino
Exclamation 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
Responder Con Cita
  #2  
Antiguo 31-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
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,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 31-10-2008
Lizette Lizette is offline
Miembro
 
Registrado: jun 2008
Posts: 98
Poder: 16
Lizette Va por buen camino
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?
Responder Con Cita
  #4  
Antiguo 31-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
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í:

Código Delphi [-]
 
var
 Valor : String;
begin
 Valor := '110';
 Showmessage(StringOfChar('0',6-length(Valor))+Valor);
 
 o también con format
 
 Valor := 110; 
 Showmessage(Format('%0.6d',[Valor]));

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.
Responder Con Cita
  #5  
Antiguo 31-10-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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!)
Responder Con Cita
  #6  
Antiguo 31-10-2008
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
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.
Responder Con Cita
  #7  
Antiguo 31-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
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,
__________________
Delphius
[Guia de estilo][Buscar]
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

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


La franja horaria es GMT +2. Ahora son las 01:13:11.


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