Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Agregar ceros a la izquierda a una variable integer. (https://www.clubdelphi.com/foros/showthread.php?t=79945)

wull 23-08-2012 02:47:47

Agregar ceros a la izquierda a una variable integer.
 
Hola a todos veran mi problema es el siguiente:
Tengo un programa conectado a una BD, y en esta tengo un campo llamado folio (de tipo numérico, entero largo) el cual es consecutivo; no lo puse autonumerico porque no pude hacer que me apreciera con el siguiente formato '00001' solo me aparecía '1', pensé que me seria más fácil hacerlo directamente en Delphi declarando una variable 'integer' e irla incrementando en 1 cada vez que se agregara un nuevo registro.
La cuestión es que la función para rellenar con ceros a la izquierda no funciona para 'integer' yo queria hacer algo como esto
Código Delphi [-]
variable:=variable+1;
pero siendo variable de tipo 'string' no puedo incrementar su valor.
Alguien tiene alguna idea de como hacerlo, ya sea desde Acces (ya que no pude cambiar el formato desde ahí) o bien en Delphi... espero no causar muchas molestias, gracias de antemano.

Caral 23-08-2012 02:51:47

Hola
El campo integer te dara numeros sin ceros a la izquierda, esto en cualquier BD.
Si lo que quieres es simplemente que el usuario vea estos numeros entonces puedes concatenar los ceros.
Lo unico es que si vas a guardar ese numero entonces tendras que usar la funcion replace.
Me parece algo complicado, yo cambiaria por tipo stringi el campo.
saludos

MartinS 23-08-2012 03:22:01

Comparto con Caral. Si necesitas ese tipo de numeración usaría el campo en string. Cuando necesites hacer el incremento conviertes el valor a entero a través de la función StrToInt, sumas uno, luego lo pasas a string nuevamente ( IntToStr) y agregas los ceros delante del string resultante.

Saludos

Delphius 23-08-2012 04:10:59

Repasando matemáticas de primer grado:
01 = 1
002 = 2
Por tanto no interesa la cantidad de ceros que pretendas poner a la izquierda. ¡NO VALEN NADA!

En todo caso, a efectos de visualización puedes emplear la propiedad DisplayFormat para indicarle el formato. Otra posibilidad es la de aprovechar el método GetText y SetText del campo en cuestión y darle el formato indicado. Entonces en la base de datos se almacena en forma entera y se deja, exclusivamente, a modo de presentación mostrarlos con los ceros.

La otra posibilidad es cambiar el tipo del campo en la base de datos por un alfanumérico de modo que en vez de almacenar un número se tiene una cadena "0....0x..x". Esto va a requerir que se hagan conversiones de string a número, y viceversa constantemente. Si este campo es una clave primaria o una foránea me parece una pésima elección esta alternativa.

Saludos,

wull 23-08-2012 05:44:05

Cosas de formato
 
Cita:

Empezado por Delphius (Mensaje 440415)
Repasando matemáticas de primer grado:
01 = 1
002 = 2
Por tanto no interesa la cantidad de ceros que pretendas poner a la izquierda. ¡NO VALEN NADA!

En todo caso, a efectos de visualización puedes emplear la propiedad DisplayFormat para indicarle el formato. Otra posibilidad es la de aprovechar el método GetText y SetText del campo en cuestión y darle el formato indicado. Entonces en la base de datos se almacena en forma entera y se deja, exclusivamente, a modo de presentación mostrarlos con los ceros.

La otra posibilidad es cambiar el tipo del campo en la base de datos por un alfanumérico de modo que en vez de almacenar un número se tiene una cadena "0....0x..x". Esto va a requerir que se hagan conversiones de string a número, y viceversa constantemente. Si este campo es una clave primaria o una foránea me parece una pésima elección esta alternativa.

Saludos,

Ja jaja si ya lo se :eek:, no es tanto por la cantidad sino por el formato, ya que al ser un folio pues generalmente usan los ceros a la izquierda; por eso necesito que se vea de esa forma; no se como funciona la propiedad DisplayFormat me podrias orientar como usarla... gracias de antemano.

olbeup 23-08-2012 09:58:56

Para poner ceros a la izquierda utiliza el FormatFloat.
Código Delphi [-]
...
var
  Folio: String;
begin
  Folio := FormatFloat('0000', 1);
end;
Cita:

Folio seria ahora "0001"
Un saludo

ecfisa 23-08-2012 14:39:35

Cita:

Empezado por wull (Mensaje 440423)
...no se como funciona la propiedad DisplayFormat me podrias orientar como usarla...

Hola wull.

Código Delphi [-]
 TIntegerField(DataSet.FieldByName('NOMBRE_DEL_CAMPO')).DisplayFormat := '00000';

Saludos. :)

wull 04-09-2012 21:57:10

Gracias por las sugerencias.
 
Bueno como todo indicaba que seria más facil trabajar con un tipo String pues he optado por usarlo... gracias a todos por sus consejos.

roman 04-09-2012 22:22:53

Una muy mala idea, si me lo permites. Claro, todo depende del uso que le des a la información, pero, en general, si una información es numérica, el motor será más eficiente si tal información se almacena como número y no como cadena.

Los ceros iniciales sonuna cuestión de formato que puede lograse fácilmente en la aplicación cliente, e incluso, en algunos gestores, desde el servidor.

// Saludos

wull 11-09-2012 21:22:02

Cita:

Empezado por roman (Mensaje 441814)

Los ceros iniciales sonuna cuestión de formato que puede lograse fácilmente en la aplicación cliente, e incluso, en algunos gestores, desde el servidor.

// Saludos

La idea de usar un campo de tipo String, fue porque no hallaba otra solución. Esto que mencionas no tengo ni idea de como hacerlo, me podrías orientar al respecto. Perdón por preguntar hasta ahora, pero como te habrás dado cuenta he estado preguntando muchas cosas más en el foro. Te agredecere mucho cualquier ayuda.

roman 11-09-2012 21:28:24

Por ejemplo, un campo entero se traducir´en un TIntegerField en Delphi, el cual deriva de un TNumericField, y éste tiene la propiedad DisplayFormat que puedes poner, por ejemplo, en '00000' para que los números aparezcan con relleno a la izquierda de hasta cinco ceros.

O bien, por ejemplo, en MySQL puedes usarla función LPAD, para que al momento de hacer la consulta SQL, se rellene el dato con ceros.

// Saludos

ecfisa 11-09-2012 21:45:27

Cita:

Empezado por wull (Mensaje 442818)
La idea de usar un campo de tipo String, fue porque no hallaba otra solución.

Pero... ¿ Habías probado las sugerencias que partían del mensaje #6 ?

Saludos.

roman 11-09-2012 21:48:51

Evientemente no :) Y yo ya ni me acordaba :o

// Saludos

Comandant 12-09-2012 20:58:36

En mysql tenes la opción de poner a la columna en la base de datos la propiedad 'ZEROFILLS' que rellenara el resto con los ceros que faltan

wull 14-09-2012 18:53:21

Cita:

Empezado por ecfisa (Mensaje 442828)
Pero... ¿ Habías probado las sugerencias que partían del mensaje #6 ?

Saludos.

Si ya he probado las recomendaciones que me han dado, es solo que me sorprendio el mensaje de roman... de hecho lo estoy haciendo de la manera en que me sugeriste, como Display Format. Es solo que como han mencionado solo sirve para visualización. Por cierto la manera en que lo estoy haciendo es la siguiente:
Como estoy usando Acces, elegí un campo de tipo Auto numerico, que en delphi es como integer... y ya en código en delphi le agrego la propiedad DisplayFormat; esto funciona bien excepto en el reporte en donde se muestra solo un número (por ejemplo 1 en lugar de 0001) pero es algo en lo que ya estoy trabajando para ver como solucionar.

roman 14-09-2012 19:20:39

Cita:

Empezado por wull (Mensaje 443141)
es solo que me sorprendio el mensaje de roman

Bueno, el mensaje fue porque tú comentaste que habías optado justo por la solución que parece, a mi juicio, la inapropiada, que es la de cambiar el tipo de dato del campo.

// Saludos

wull 14-09-2012 20:11:13

Lo siento roman olvide mencionarlo:o, pero probe varias alternativas; entre ellas cambiar el tipo de datos a string... y despues volví con el tipo de datos entero. De cualquier manera muchas gracias por tus comentarios.


La franja horaria es GMT +2. Ahora son las 19:59:52.

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