Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Formato Fecha en un DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=94040)

javicho_villa 28-06-2019 20:05:18

Formato Fecha en un DBGrid
 
Buenos días a todos ustedes amigos,

Recurro nuevamente a Uds. por un problema que se que debería ser sencillo pero por esas cosas de la vida se me hace un mundo y me esta tomando bastante tiempo resolverlo.

Tengo una base de datos en SQL y mi aplicación la estoy desarrollando en XE8, utilizo componentes ADO y al realizó consultas simples de las Tablas, pero cuando las muestro en un dbgrid no puedo cambiar el formato de fechas, pero si el formato de números hasta un grado.
Ahora enlazo un ADoQuery con DataSource y este aun DbGrid, en el código donde trato de cambiar el formato me sale diferentes errores, algunas veces pasa sin error pero nunca cambia el formato, aquí les paso el primer código.

Código Delphi [-]
  Cad := 'select * from Guia ';
  with self.CabeceraADOQuery do
    begin
      Close;
      SQL.Clear;
      SQL.Add(Cad);
      ExecSQL;
      Active := true;
      Last;
    end;
    //(CabeceraADOQueryFecha as TDateTimeField).DisplayFormat := 'dd/mm/yyyy';

    //TDateTimeField(CabeceraADOQuery.FieldByName('Fecha')).DisplayFormat := 'dd/mm/yyyy';

    TDateTimeField(CabeceraADOQueryFecha.Value).DisplayFormat := 'DD/MM/YYYY';

   //(Datos.DatosDM.CabeceraADOQuery.FieldByName('Fecha') as TFloatField).DisplayFormat:=dd/mm/yyyy;
   //(Datos.DatosDM.CabeceraADOQuery.FieldByName('Cantidad') as TFloatField).DisplayFormat := '###,##0.00';
   //(Datos.DatosDM.CabeceraADOQuery.FieldByName('Avance') as TFloatField).DisplayFormat := '###,##0.00';

Como verán he probado de todo pero nose por que detalle no funciona, también he agregado todas las columnas en el ADOQuery para ver si en cada columna podria salir por defecto el DisplayFormat, pero no es así.

También puse código en evento AdoQueryBeforeOpen - sin tener exito

Código Delphi [-]
procedure TGuiaForm.CabeceraADOQueryBeforeOpen(DataSet: TDataSet);
begin
  TDateTimeField(CabeceraADOQueryFecha.Value).DisplayFormat := 'DD/MM/YYYY';
  //TDateField(self.CabeceraADOQueryFecha).DisplayFormat := 'DD/MM/YYYY'
  //(CabeceraADOQuery.FieldByName('Fecha') as TDateTimeField).DisplayFormat := 'DD/MM/YYYY';
end;

por ultimo también probé en el evento GetCellText con la misma mala suerte
Código Delphi [-]
procedure TGuiaForm.ListaGetCellText(Sender: TObject; Field: TField;
  var Text: string);
begin
  if Field.FieldName='Fecha' then
    (Lista.Columns[1] := StrToDate(FormatDateTime('DD/MM/YYYY',VarToDateTime(CabeceraAdoQuery.FieldByName('Fecha').AsVariant)));
//    (Lista.Columns[1].Field as TDateTimeField).DisplayFormat := 'DD/MM/YYYY';
    //(CabeceraAdoQuery.FieldByName('Fecha') as TDateTimeField).DisplayFormat := 'DD/MM/YYYY';
    //Field.ByName()
end;

Amigos les pido me echen una mano con este problema, un fuerte abrazo para todos.

PD. Para el formato de numero solo puedo cambiarlo los decimales, pero las comas nose porque no acepta '0.00', cual seria el formato correcto (0,000.00) ó (#,###.##)

Caminante 28-06-2019 20:38:17

Hola


A me parece que bastaria con:



Código Delphi [-]
var
 F:TDateField;

begin
F:=Datos.DatosDM.CabeceraADOQuery.FieldByName('Fecha')as TDateField;
F.DisplayFormat:='dd/mm/yyyy';


Seria cuestion de probar.

Saludos

javicho_villa 28-06-2019 22:10:42

Muchas gracias Caminante
 
ante todo gracias por tomarse el tiempo en leer y ayudarme.

lo he probado en BeforeOpen pero da error
Código Delphi [-]
procedure TGuiaForm.CabeceraADOQueryBeforeOpen(DataSet: TDataSet);
var F:TDateField;
begin
    F:=Datos.DatosDM.CabeceraADOQuery.FieldByName('Fecha')as TDateField;
    F.DisplayFormat:='dd/mm/yyyy';
  //TDateTimeField(CabeceraADOQueryFecha.Value).DisplayFormat := 'DD/MM/YYYY';
  //TDateField(self.CabeceraADOQueryFecha).DisplayFormat := 'DD/MM/YYYY'
  //(CabeceraADOQuery.FieldByName('Fecha') as TDateTimeField).DisplayFormat := 'DD/MM/YYYY';
end;

Tambien lo probe en un evento de un boton donde inicializo el query pero tambien sale error: CabeceraAdoQuery: Field 'Fecha' not found, este error sale en los dos eventos.

Código Delphi [-]
  with self.CabeceraADOQuery do
    begin
      Close;
      SQL.Clear;
      SQL.Add(Cad);
      ExecSQL;
      Active := true;
      Last;
    end;
    //(CabeceraADOQueryFecha as TDateTimeField).DisplayFormat := 'dd/mm/yyyy';

    //TDateTimeField(CabeceraADOQuery.FieldByName('Fecha')).DisplayFormat := 'dd/mm/yyyy';

    //TDateTimeField(CabeceraADOQueryFecha.Value).DisplayFormat := 'DD/MM/YYYY';
    F:=Datos.DatosDM.CabeceraADOQuery.FieldByName('Fecha')as TDateField;
    F.DisplayFormat:='dd/mm/yyyy';

Casimiro Notevi 29-06-2019 00:09:33

Código:

Close;
SQL.Clear;
SQL.Add(Cad);
ExecSQL;
Active := true;
Last;

También ten en cuenta que eso está mal y será más o menos así:
Código Delphi [-]
Close;
SQL.Text:=Cad; // asignas el select
Open;  // open, porque será un select. (execsql es para ejecutar insert, delete, update)
Last;  // vas al último registro

Caminante 29-06-2019 00:40:07

Hola


Cita:

Empezado por javicho_villa (Mensaje 532579)
tambien sale error: CabeceraAdoQuery: Field 'Fecha' not found, este error sale en los dos eventos.


Segun el mensaje de error el problema es que no encuentra el campo indicado. Seria cuestion de verificar el SQL que envias.

javicho_villa 30-06-2019 00:25:58

Muchas gracias por las respuestas, el query es un (select * from Pedido) si muestra la fecha y todos los campos en el dbgrid,
pero en un formato que no deseo, he intentado todo lo que menciono anteriomente pero nose porque no puedo modificar el formato de fecha en el dbgrid.

Casimiro Notevi 30-06-2019 17:07:10

Pues si no hace caso del formato, no reconoce el campo, etc. es porque el dbgrid tiene asignado otro datasource distinto al que corresponde.

oscarac 01-07-2019 05:31:20

y si el fomato del campo lo actualizas en las propiedades del mismo campo?
en el displayformat del campo del dataset purdes colocar dd/mm/yyyy y listo

javicho_villa 01-07-2019 17:56:57

Muchas gracias por sus respuestas.
Lamentablemente sigo con el problema, me es raro, lo que hice, es poner un AdoQuery, un DataSource en forma local dentro del formulario, y me aparace todos los datos, puedo cambiar parcialmente el formato de numero, pero el de fechas nose por que no lo puedo cambiar por nada del mundo.
Agregue todos los campos en el AdoQuery, para tener la esperanza de que en el campo Fecha del Query salga el DisplayFormat, pero no aparece y siempre trato jalar esa propiedad con el TDateTimeField, pero sin éxito.
Estos errores sacan de quicio por que deberían ser fáciles pero hay algo mal que estoy haciendo y no me doy cuenta, si me pueden ayudar por favor se los voy agradecer infinitamente.

Casimiro Notevi 01-07-2019 18:21:44

Se supone que la fecha es un campo fecha en la base de datos, ¿no?

javicho_villa 01-07-2019 18:37:22

Así es, estoy trabajando con SQL, y si se visualiza la fecha pero en el formato año-mes-día, lo que quiero es cambiarlo al formato día/mes /año

Caminante 01-07-2019 18:39:17

Otra opcion es usar el evento OnGetText del campo en cuestion


Saludos

oscarac 01-07-2019 18:52:57

Cita:

Empezado por javicho_villa (Mensaje 532588)
Muchas gracias por sus respuestas.
Lamentablemente sigo con el problema, me es raro, lo que hice, es poner un AdoQuery, un DataSource en forma local dentro del formulario, y me aparace todos los datos, puedo cambiar parcialmente el formato de numero, pero el de fechas nose por que no lo puedo cambiar por nada del mundo.
Agregue todos los campos en el AdoQuery, para tener la esperanza de que en el campo Fecha del Query salga el DisplayFormat, pero no aparece y siempre trato jalar esa propiedad con el TDateTimeField, pero sin éxito.
Estos errores sacan de quicio por que deberían ser fáciles pero hay algo mal que estoy haciendo y no me doy cuenta, si me pueden ayudar por favor se los voy agradecer infinitamente.

estas seguro que es un campo fecha?
puedes colocar una foto de la estructura de los campos?

Casimiro Notevi 01-07-2019 18:59:30

Cita:

Empezado por Casimiro Notevi (Mensaje 532589)
Se supone que la fecha es un campo fecha en la base de datos, ¿no?

Cita:

Empezado por oscarac (Mensaje 532592)
estas seguro que es un campo fecha?
puedes colocar una foto de la estructura de los campos?




Cita:

Empezado por javicho_villa (Mensaje 532590)
Así es, estoy trabajando con SQL, y si se visualiza la fecha pero en el formato año-mes-día, lo que quiero es cambiarlo al formato día/mes /año

No es lo que hemos preguntado :)

javicho_villa 01-07-2019 19:17:17

1 Archivos Adjunto(s)
Muchas gracias por ayudarme, les adjunto una imagen con la imagen del dbgrid como se muestra y la estructura de la tabla.

javicho_villa 01-07-2019 19:27:29

Les paso la estructura en sql

Código SQL [-]
USE [Textil]
GO

/****** Object:  Table [dbo].[Guia]    Script Date: 01/07/2019 12:26:36  ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Guia](
  [Id_Guia] [int] NOT NULL,
  [Id_Cliente] [int] NULL,
  [Id_ClienteTerceroTransporte] [int] NULL,
  [Id_ClienteTerceroProveedor] [int] NULL,
  [Id_Venta] [int] NULL,
  [Id_Pedido] [int] NULL,
  [Id_Parametro_TipoDoc] [int] NULL,
  [Id_Parametro_Motivo] [int] NULL,
  [NumeroDoc] [varchar](20) NULL,
  [Serie] [varchar](6) NULL,
  [Numero] [int] NULL,
  [Fecha] [date] NULL,
  [Destinatario] [varchar](100) NULL,
  [Direccion] [varchar](100) NULL,
  [DomicilioDestino] [varchar](100) NULL,
  [DomicilioPartida] [varchar](100) NULL,
  [Marca] [varchar](20) NULL,
  [Placa] [varchar](10) NULL,
  [Otros] [varchar](100) NULL,
  [OrdenCompra] [varchar](50) NULL,
  [Observaciones] [varchar](50) NULL,
  [Cliente] [bit] NULL,
  [Facturado] [bit] NULL,
  [Id_Usuario] [int] NULL,
  [FRegistro] [date] NULL,
 CONSTRAINT [PK_Guia] PRIMARY KEY CLUSTERED 
(
  [Id_Guia] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

oscarac 01-07-2019 21:55:22

que raro

si el campo es fecha, jalandolo con .asdatetime es suficiente

javicho_villa 08-10-2019 01:56:58

Problema Resuelto
 
Después de mucho tiempo, me puse a tratar de solucionar este viejo problema y encontré la solución:

1. Tienes que agregar en el componente AdoQuery los Campos que vas a utilizar, en este caso en el campo fecha, dentro del evento OnGetText puse el siguiente código:

Código Delphi [-]
procedure TKardexForm.CabeceraADOQueryFechaGetText(Sender: TField;
  var Text: string; DisplayText: Boolean);
begin
 Text := FormatDateTime('dd/mm/yyyy', VarToDateTime(CabeceraADOQuery.FieldByName('Fecha').AsVariant));
end;

y funciono muy bien, muchas gracias a todos ustedes por tomarse la molestia de ayudarme me dieron la ruta para solucionar este pequeño problema.
saludos a todos.


La franja horaria es GMT +2. Ahora son las 05:14:18.

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