Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Asigna formato de campos dentro de la BBDD (https://www.clubdelphi.com/foros/showthread.php?t=60785)

Cannabis 14-10-2008 13:45:44

Asigna formato de campos dentro de la BBDD
 
Cuando despliego información en un DBGrid asigno el formato a los campos:

Código Delphi [-](query1.FieldByName('Importe') AS TFloaField).DisplayFormat:= ',0.00' (query1.FieldByName('Fecha') AS TDateField).DisplayFormat:= 'dd/mmm/yyyy'


Trabajo exclusivamente con queries y cada vez que se actualiza la información o el usuario cambia el orden de los datos, tengo que asignar nuevamente el formato a cada campo.

¿Es posible definir el formato de los campos dentro de la base de datos?

Utilizo D7, Firebird 2.0 e IbExpert.

Gracias.

Salud.

Delphius 14-10-2008 15:36:40

Hola Cannabis,
¿Podrias explicarnos mejor tu duda?
Me extraña que cada vez que se actualiza los datos tengas que establecer los formatos. A menos de que se construyan las consultas dinámicamente no debería suceder.

¿A que te refieres a que el usuario cambia el orden de los datos?:confused:
Con FieldByName no importa si el campo en cuestión es el primero o el vigesimo segundo, si existe dicho campo lo encontrará.

Si tus consultas son estáticas lo que puedes hacer es definir los campos persistentes y de ese modo en tiempo de diseño ya configuras el formato de cada campo.

No se si es lo que buscas, y/o si yo entendí mal, me gustaría que nos expliques mejor tu caso.

Saludos,

Cannabis 14-10-2008 16:24:53

Gracia por tu interés Delphius.

Cita:

Empezado por Delphius (Mensaje 319950)
.....
¿A que te refieres a que el usuario cambia el orden de los datos?:confused:

Al abrir la Form en donde se encuentra el DBGrid se ejecuta el query: SELECT........
La última línea del query es: ORDER BY........

Cuando el usuario cambia el orden de las columnas del dbgrid, el query se ordena según el orden establecido.
En el evento OnColumnMoved:
Código Delphi [-]
procedure Tform1.dbgridColumnMoved(Sender: TObject;   FromIndex, ToIndex: Integer);
var
  s_Cuerda: String;   
  i_Contador: Byte;

begin
  
  s_Cuerda:= '';
  for i_Contador:= 0 to (dbgrid.Columns.Count - 1) do
  begin
    if dbgrid.Columns[i_Contador].FieldName <> '' then
      s_Cuerda:= s_Cuerda + dbgrid.Columns.Items[i_Contador].FieldName + ',';   
  end;
  s_Cuerda:= Copy(s_Cuerda,0,Length(s_Cuerda) - 1);    query.Close;   

  query.SQL.Delete(query.SQL.Count - 1);
  query.SQL.Add('ORDER BY ' + s_Cuerda);
  query.Open;   
  (query.FieldByName('Fecha') AS TDateTimeField).DisplayFormat:= 'dd/mmm/yyyy';
  (query.FieldByName('Importe') AS TFloatField).DisplayFormat:= ',0.00';  

end;

En conclusión: cada vez que se abre el query debo especificar nuevamente el formato de los campos. Si no lo hago, los campos pierden el formato.

Espero haber sido claro con mi duda.

Gracias de nuevo.

Salud.

roman 14-10-2008 16:54:02

Hasta donde llego a entender de esta duda, me parece que ése es el comportamiento esperado. Cada vez que se ejecuta la consulta, el componente Query crea on-the-fly, los componentes TField adecuados y por ello hay que volver a establecer ese tipo de propiedades. Esto lo podrías evitar usando campos persistentes, es decir, mediante el editor de campos de tu Query. De esa forma, los campos TField quedan ya fijos y no vuelven a crearse en cada ejecución de la consulta.

// Saludos

Cannabis 14-10-2008 22:00:58

Creo el query en runtime, así que seguiré especificando el formato cada vez que ejecute el query.

Se agradece la ayuda de ambos maestros.


Salud.


La franja horaria es GMT +2. Ahora son las 07:36:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi