Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Formato numero (https://www.clubdelphi.com/foros/showthread.php?t=64176)

odrack 20-03-2009 18:00:32

Formato numero
 
Saludos compañeros!!

Tengo un detalle a la hora de mostrar los campos en pantalla, trabajo con Tquery y como base de datos MySQL, necesito que los campos mostrados en pantalla se muestren como tipo moneda (Ej. 1,000.00), he conseguido mostrar los datos con los decimales con la funcion VAR:=format('%0.2f', [VAR1]), pero con esto solo consigo formatear a 2 decimales (1000.00), he provado con la funcion n VAR:=format('%0.2fn, [VAR1]), y me da los datos formateados con coma (1,000.00), el problema aqui es cuando tomo el dato para realizar una operacion ya que me provoca un error de flotante no valido,
Que puedo hacer para que solo muestre los datos formateados en pantalla y no me de error al realizar mas operaciones.

Los datos los debo formatear en Dbgrid, dbedit y edit, ¿Alguien tendra una sugerencia?

Gracias de antemano!!:p

Delphius 20-03-2009 18:28:47

Hola odrack,
¿Tienes los campos de forma persistentes?

Si es así selecciona el campo y pon la propiedad currency en true. De este modo fuerzas a que el campo se lo trate como moneda.

Además, deberías hacer uso de la propiedad DisplayFormat y allí indicar el formato de visualización. Revisa la ayuda sobre esta propiedad.
Esta propiedad sólo es a efectos de visualización, internamente el campo seguirá con el valor de modo que no se ve alterado el valor original. Por ejemplo se puede tener guardado un entero (digamos que es 20) y hacer uso de esta propiedad para hacer que se muestre así: [20].

Si no tienes los campos persistentes, y/o la consulta se realiza en tiempo de ejecución, puedes cambiar estás propiedades asignandolo en tiempo de ejecución.

Algo como:
Código Delphi [-]
TFloatField(MiQuer1.FieldByName(NombreCampo)).Propiedad := ....

Esto debes hacerlo una vez que abres la consulta.

Si no se me entiende te agradecería que lo digas y vemos el modo de ayudarte.

Saludos,

odrack 20-03-2009 19:07:08

Gracias Delphuis!!

Los campos si los tengo de formapersistente, he buscado la propiedad currency pero no me aparece, asi como tampoco tengo la opcion de displayformat, anteriormente habia leido sobre esto pero no conseguinada, agrege los campos en el query busque la propiedad displayformat y no me ha aparecido.

La version que utilizo para programar es codgear delphi 2007, influye algo??

saludos

Delphius 20-03-2009 19:32:52

Cita:

Empezado por odrack (Mensaje 342151)
Gracias Delphuis!!

Los campos si los tengo de formapersistente, he buscado la propiedad currency pero no me aparece, asi como tampoco tengo la opcion de displayformat, anteriormente habia leido sobre esto pero no conseguinada, agrege los campos en el query busque la propiedad displayformat y no me ha aparecido.

La version que utilizo para programar es codgear delphi 2007, influye algo??

saludos

Voy a hacer una pregunta tonta pero me parece que es necesaria... ¿Los campos son enteros, o flotantes? Es decir son campos que descienden de TIntegerField o TFloatField?

No creo que tenga que ver el hecho de que sea D2007. Las propiedades deberían estar...

Si tus campos son textos (Char(), Varchar() en tu base de datos) es de esperar que no estén. Pero si son campos integer, numeric, decimal, etc debería crearte los campos persistentes adecuados y éstos tienen estas propiedades.

Sería algo extraño...

Si nos puedes comentar más al respecto tal vez podríamos ver por donde está el problema.

Saludos,

odrack 20-03-2009 19:39:12

Saludos!!

Creo que has respondido mi pregunta, la mayor parte de los campos en la base de datos los tengo en Char incluyendo los campos de cantidades, al llamar los campos y al hacer operaciones los convierto en datos de tipo floatante y regreso el resultado a string nuevamente.

Habra alguna solución para mostrar datos en pantalla de tipo numerico con comas y cecimales sin que me afecte la operacion??

Gracias Delphius!!

Delphius 20-03-2009 20:05:47

Cita:

Empezado por odrack (Mensaje 342158)
Saludos!!

Creo que has respondido mi pregunta, la mayor parte de los campos en la base de datos los tengo en Char incluyendo los campos de cantidades, al llamar los campos y al hacer operaciones los convierto en datos de tipo floatante y regreso el resultado a string nuevamente.

Habra alguna solución para mostrar datos en pantalla de tipo numerico con comas y cecimales sin que me afecte la operacion??

Gracias Delphius!!

Bueno, lo ideal y lógico sería que cambiases el tipo de dato en tu base de datos.
Ya que esto te evita estar haciendo esas innecesarias conversiones que lo único que hacen es complicar la lógica de tu aplicativo.

Ahora bien, hacer esto implica eliminar los campos persistentes y volver a crearlos. Y tal vez algunas que otras modificaciones en tu código.

Si por alguna cuestión no puedes cambiar el tipo, lo que puedes hacer es emplear los eventos onGetText y OnSetText de tus campos.

Este evento se puede aprovechar para cambiar el texto a mostrar y a guardar. Si te fijas ambos eventos tienen un parámetro Text. Es éste Text el que se debe y puede aprovechar para alterar el texto a mostrar y/o a guardar:

Código Delphi [-]
procedure TForm1.IBTable1MONEDAGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin

end;

procedure TForm1.IBTable1MONEDASetText(Sender: TField; const Text: String);
begin

end;

En mi ejemplo uso un IBTable, y un campo llamado MONEDAS.


Revisa la ayuda para más información.

Saludos,

odrack 20-03-2009 20:34:50

Nuevamente gracias delphius!!

Solo tengo una duda, los datos de ongettext y onsettext tambien me sirven para un TQuery??, ya que no he logrado ver esas propiedades en los eventos:confused:

Saludos!!

Delphius 20-03-2009 20:48:00

Cita:

Empezado por odrack (Mensaje 342168)
Nuevamente gracias delphius!!

Solo tengo una duda, los datos de ongettext y onsettext tambien me sirven para un TQuery??, ya que no he logrado ver esas propiedades en los eventos:confused:

Saludos!!

A ver si nos entendemos,

OnGetText y OnSetText son dos eventos disponibles para los objetos TField y descendientes de éste, es decir que se aplican a los campos. Es independiente del dataset que se emplee.

¿Que propiedades?:confused:
Selecciona el campo persistente, ve a la solapa eventos... allí está el evento. Ya, lo que hagas allí dentro es otra cosa...

Por favor, se más detallista de como estás haciendo esto. Cuanto más nos puedas explicar y comentar de los pasos que estás haciendo más fácil será ayudarte.
No estoy a tu lado, no puedo ver donde tienes el problema.

Saludos,

odrack 20-03-2009 21:08:58

No me explique bien, :p

Lo que trato de decir es lo siguiente, tengo una forma que contiene un button, dbgrid, dbedit, Tquery y un Datasource.

Con el boton hago la consulta de mi base de datos

Query1.close;
query1....
....

Con esto obtengo los datos en el dbgrid y en dbedit.text

Los eventos ongettext y onsettext los he buscado en Tquery, Dbgrid y en los dbedit, pero no los veo para poder crear el procedimiento que mencionas

Código Delphi [-]
procedure TForm1.IBTable1MONEDAGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin

end;

Mi pregunta era que si en los eventos de Tquery o dbgrid se encontraban OnGetText y OnSetText.

Espero haberme explicado, por que creo que ya me confundi un poco!:p

Delphius 20-03-2009 21:20:12

¡Y yo ya no se como decirte que esos eventos no pertenecen al dataset (en tu caso TQuery) sino a los campos persistentes!:eek:;)

Si buscas en los foros sobre OnGetText y OnSetText vas a encontrar algunos ejemplos.
Por otro lado, si no lo hiciste aún, recomiendo la lectura del libro La Cara Oculta de Delphi 4. No tiene desperdicio.

Saludos,


La franja horaria es GMT +2. Ahora son las 15:25:37.

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