PDA

Ver la Versión Completa : Formatear columna dbgrid


cucuy
05-01-2008, 00:06:01
Hola amigos del foro, estoy utilizando un dbgrid para mostrar el resultado de una busqueda de un adoquery el problema es que un campo de la busqueda es un tipo float. Quiero formatearlo y en un hilo de este mismo foro lei que se utilizaba algo asi

(adoquery1.fieldbyname('fecha') AS TFloat).DisplayFormat:= ''###,##0.00''

Pero al momento de querer usar el displayformat no me presenta esa propiedad. Estoy utilizando MYSQL, delphi 7 y adoquery

Saludos :D

basti
05-01-2008, 00:18:29
Es algo así

(adoquery1.FieldByName('NombreCampo') as TFloatField).DisplayFormat := '###,##0.00';

cucuy
05-01-2008, 00:37:22
Hola Basti fijate que le puse asi como me dijiste pero no me acepta el As asi solo separado le puedo poner AsFloat pero tampoco me funciona, no sera cosa del diablo? jajaja ntc pues no le allo cual es el error el codigo que te digo que vi en uno de los hilos de aqui del club no se si seria para otro tipo de query

Saludos..

Caral
05-01-2008, 00:51:10
Hola
No lo entiendo, me lo explican.
Seguro el nombre 'fecha' es el nombre del archivo?, me suena a fecha;)
La sentencia normalmente es:

adoquery1.fieldbyname('fecha').Value:= loquesea;
Para mi falta algo en el codigo que nos muestras.:confused:
O es el resultado de una comparación, para lo que también falta código.
Bueno, recuerda que soy novato, no me hagas mucho caso.
Saludos

cucuy
05-01-2008, 00:55:30
:)Hola Caral asi esta mas entendible asi tengo el codigo por el cual busco que mi dbgrid muestre en base a lo que ahy en el adoquery qbus el campo cantidad que es de tipo float que me lo muestre con dos decimales el problema es que el DisplayFormat simplemente no lo reconoce el delphi.


(qbus.fieldbyname('cantidad').AsFloat).DisplayFormat:= '###,##0.00'

es que si habia pasado el codigo un poco mal perdon

Saludos ....

Caral
05-01-2008, 01:14:20
Hola
La manera sencilla de hacer lo que quieres:
Ojo, Novato habla.:D
Sabes que el query tiene una pantallita pequeña que es la que contiene los campos, verdad?.
Le das doble click al query y le das ADD, con esto tendras los campos en la pantallita.
Ahora esto se limita a:

qbusCantidad.DisplayFormat := '###,##0.00';
Tal y como esta, sin separación entre el nombre del query y el campo.
Asi te evitas cambios de formato, llamar al archivo, etc.
Saludos

cucuy
05-01-2008, 02:11:02
Hola caral gracias por contestar, disculpa mi ignorancia pero , la pantallita pequeña a la que te refieres es el fields editor, pero no aio en que lugar poner la linea de codigo que me pasastes ya que en la lista de campos no se puede editar nada de lo que aparece ahy

saludos i mil gracias .....

Lepe
05-01-2008, 02:17:52
En el Field Editor, haces clic en un campo, y ahora en el Inspector de objetos, tienes la propiedad "DisplayFormat", así como EditFormat ;).

Saludos

Caral
05-01-2008, 02:18:15
Hola
No entiendo?
En la pantallita solo con el add se van a colocar los campos de la tabla.
Esto se hace con click derecho del raton, ahi veras ADD.(creo que se llama fields editor, no se)
Una vez hecho esto cierras la pantalla, ya quedaran ahi (Osea solo los campos, nada de codigo)
El codigo que puse lo pones en el mismo lugar donde tenias el otro, supongo que en algun evento de un boton o algo.
Saludos

Caral
05-01-2008, 02:37:37
Hola
Maestro, que bueno eres.
Soy sincero, nunca lo había visto.
Otra cosa mas que aprendo y sin querer.:D
Saludos

cucuy
05-01-2008, 02:39:37
Este mmm este mmm nop no jununcio asi como me dijites caral sabes que lo que pasa es que no me reconce delphi la funcion DisplayFormat me dice que undeclared identifier, la opcion que me daba lepe de poner en add campo cantidad luego en el inspector de obejetos en display no me funciona por que ese query lo utilizo para insertar tambien jajaja, necesito que sea algo asi para el tiempo de ejecucion, no se si me de a entender

algo asi >>>>> qbusCantidad.DisplayFormat := '###,##0.00'; >>>> pero no le entiendo por que no me quiere reconocer el displayformat para usarlo despues en una consulta en un boton.

Caral
05-01-2008, 02:44:29
Hola
Pues yo tampoco se por que.
Me imagino que tienes algo mas que estorba.
Que delphi usas, yo tengo el 6 y va perfecto, tal y como lo puse.
La opción de Lepe es genial, debería funcionarte.
Saludos

cucuy
05-01-2008, 04:58:53
Hola pues puede ser quiza la version de delphi que tengo por que es muy raro que no me quiera reconocer esa propiedad mira io tengo el Delphi7. Y asi tengo el codigo: no me acuerdo como se pone el codigo para que salga resaltado pero ahy va :D:

procedure Tfmordenes.btaceptarClick(Sender: TObject);
begin
with datos do
begin
cn6.Close;
qbus.Close;
qbus.SQL.Clear;
qbus.SQL.Add('select * from Inventario');
cn6.Open;
qbus.Open;
qbusCantidad.DisplayFormat := '###,##0.00';// lo puse asi
u.FieldByName('cantidad').AsFloat.DisplayFormat:= '###,##0.00';//
end;
end;
y asi y tampoco me sale el mismo error en DispolayFormat, lo que me fije que al poner el punto despues del ASfloat me dice me sale r Pascal Error] Unit14.pas(1): Unable to invoke Code Completion due to errors in source code y cuando despues de ('Cantidad') le pongo el punto para que me presente le menu de opciones me presenta

DISPLAYNAME
DISPLAYLABEL
DISPLAYTEXT
DISPLAYWIDTH
pero me la hace de tos en el displayformat :eek: no lo reconoce.

Lepe
05-01-2008, 13:40:08
la opcion que me daba lepe de poner en add campo cantidad luego en el inspector de obejetos en display no me funciona por que ese query lo utilizo para insertar tambien jajaja

¿Y?

Es decir, eso no tiene nada que ver, de hecho yo uso:
DisplayFormat: ,#0.00 € // esta es la abreviatura de lo que tu pones.
EditFormat: 0.00 // al tiempo de editar, que quite las comas de millar, para que no interfiera.

Mientras estás editando, es decir, con el foco del ratón en ese DBEdit, verás siempre como mínimo 1 número, el punto decimal y dos decimales.

Al salir del DBEdit, se formatea con el separador de miles y el símbolo de moneda en mi caso.

Saludos

cucuy
05-01-2008, 17:23:31
Hola Lepe, si si te entiendo mira ya hice el procedimiento que tu me dijiste en una forma aparte y si funciona si formatea los valores de forma correcta, pero por lo que vi el query no lo puedo utilizar para mostrar agregar o modificar informacion de otra tabla diferente a la que agrege los campos, por que. Si le pongo add fields y agrego los campos de la inventario en un boton puedo insertar eliminar y buscar con ese query, pero si deseo mostrar informacion de la tabla trabajadores con el mismo query de volada me bota el error que no encuentra el campo cantidad. Por como yo lo entiendo al agregar el campo al fieldseditor se queda fijo i siempre que se utilice ese query va tener que ir incluido un campo con ese nombre, no se si me di a entedender, en pocas palabras al usar el fields editor y agregar campos al estarlo haciendo en tiempo de diseño estoy ligando de forma permanente a la tabla inventario....
Saludos...... y gracias por contestar :D

Lepe
05-01-2008, 19:10:49
vale, vale, ahora si te he entendido.

Entonces tienes que realizar algunas argucias. A ver si de memoria puedo resolverte algo:


const MisCamposFormateados = 'cantidad;importe';

procedure FormateaCampos(query:TQuery);
var I:integer;
begin
for i:= 0 to query.FieldCount -1 do
if Pos(Query.Fields[i].FieldName, MisCamposFormateados) <> 0 then
Query.Fields[i].DisplayFormat := ',#0.00'
end;


El tema consiste en guardar en una constante todos los campos que quieres que sean formateados en tiempo de ejecución. Ahora con esa rutina, puedes añadir el displayFormat a todas las querys que tengas en tu programa.

Para usarlo:

qry1.close;
qry1.sql.Text := 'select * from inventario';
FormateaCampos(qry1);
qry1.Open;
...
qry1.Close;
qry1.sql.text := 'select * from trabajadores');
FormateaCampos(qry1);
qry1.Open;

tanto en la tabla trabajadores como en la inventario, si existe un campo llamado "cantidad" o bien "importe", se le añade los separadores de millares.

Si al tiempo de crear los nombres de los campos has sido cauteloso, y los nombres de los campos son iguales, una rutina de este tipo puede servirte.

Se podría hacer de una forma más eficiente, pero tendríamos que complicar un poquito más el diseño, si estas interesado avisa.

Saludos.

cucuy
05-01-2008, 19:57:32
Hola Lepe fijate que todo hiba bien osea a mi esa se me hace una solucion muy buena por que puedo manipular por codigo y me quito de andar por todos los componentes configurando bueno el problema es el siguiente puse tu codigo tal y como me lo dijiste pero...............

procedure FormateaCampos(query:TADOQuery);
var I:integer;
begin
for i:= 0 to query.FieldCount -1 do
if Pos(Query.Fields[i].FieldName, MisCamposFormateados) <> 0 then
Query.Fields[i].DisplayFormat := ',#0.00'
end;

lo puse asi i me sale [Error] Unit1.pas(44): Undeclared identifier: 'DisplayFormat'

sigue sin reconocerme el DisplayFormat :( como la vez

Saludos..... i mil gracias

jachguate
05-01-2008, 20:29:30
lo puse asi i me sale [Error] Unit1.pas(44): Undeclared identifier: 'DisplayFormat'

sigue sin reconocerme el DisplayFormat :( como la vez


Claro, porque TField no tiene esa propiedad, que si tiene TFloatField. He visto que ya te han recomendado antes aplicar un molde de tipo para este caso:


const MisCamposFormateados = 'cantidad;importe';

procedure FormateaCampos(query:TQuery);
var I:integer;
begin
for i:= 0 to query.FieldCount -1 do
if Pos(Query.Fields[i].FieldName, MisCamposFormateados) <> 0 then
(Query.Fields[i] as TFloatField).DisplayFormat := ',#0.00'
end;

cucuy
05-01-2008, 21:20:45
Holaaaaaaaa por fin despues de mil intentos funciono si era la solucion el TFloadField era la diferencia gracias a todos por la ayuda:
const MisCamposFormateados = 'cantidad;importe';

procedure FormateaCampos(query:TQuery);
var I:integer;
begin
for i:= 0 to query.FieldCount -1 do
if Pos(Query.Fields[i].FieldName, MisCamposFormateados) <> 0 then
(Query.Fields[i] as TFloatField).DisplayFormat := ',#0.00'
end;

asi funciona de forma correcta jejejeje es de mucha ayuda ese procedimientomuchas gracias por todo hasta luego :D:D byeeeeeee