Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Is not a Valid Date Time (https://www.clubdelphi.com/foros/showthread.php?t=94111)

donpedro 07-08-2019 02:55:35

Is not a Valid Date Time
 
Hello y bendiciones. Aqui estoy de nuevo con un nuevo error

Estoy usando Delphi 2009 y Sql Server 2012.
Tengo un modulo de registro de pacientes donde uso componentes de base de datos EJ: DBedits, DBradiogroup Etc...
El unico comoponente que no es de base de datos es el DateTimePicker y con ese componente es que tengo el error. Me explico:

En el evento BeforePost del AdoTable correspondiente a la tabla pacientes coloco el siguiente codigo:
Código Delphi [-]
procedure TFrmpacientes.TpacientesBeforePost(DataSet: TDataSet);
begin

       Dataset.FieldByName('Fecha Nacimiento').AsString:=DateToStr(DBfechanac.Date);

end;

Con ese codigo en ese evento no tengo problema. El problema esta, cuando coloco en el evento AfterScroll del AdoTable el siguiente codigo, para que cuando navegue por los registros el DateTimePicker tome la fecha que esta almacenada en la tabla pacientes.
Código Delphi [-]
procedure TFrmpacientes.TpacientesAfterScroll(DataSet: TDataSet);
begin

       DBfechanac.Date:=StrToDate(Dataset.FieldByName('Fecha Nacimiento').AsString);

end;

Entonces cuando ejecuto el programa y entro al modulo Registro de Pacientes, al hacer clic en el boton Nuevo Registro sale el error: "Is Not a Valid Date Time". He probado cambiando el campo de Fecha de Nacimiento a DATE en la base de datos y hace lo mismo.

Gracias de antemano por la ayuda brindada

duilioisola 07-08-2019 08:30:13

Supongo que el problema está en como se da formato a la fecha al convertira a string.
  • m/d/y
  • y/m/d
  • d/m/y
  • y lo mismo, pero con la hora incluida
  • y lo mismo, pero con la hora y zona horaria incluida.

Lo correcto es trabajar con el tipo de datos sin hacer transformaciones.

Los campos de una tabla suelen tener la propiedad
  • .AsString
  • .AsDate
  • .AsDateTime
  • .AsInteger
  • .AsFloat
  • etc.

Prueba utilizado

Código Delphi [-]
Dataset.FieldByName('Fecha Nacimiento').AsDateTime := DBfechanac.Date;
y
Código Delphi [-]
DBfechanac.Date := Dataset.FieldByName('Fecha Nacimiento').AsDateTime;

Neftali [Germán.Estévez] 07-08-2019 10:33:29

Cita:

Empezado por duilioisola (Mensaje 533067)
Lo correcto es trabajar con el tipo de datos sin hacer transformaciones.

+1

O dado que en la unit System.pas hay esto:
Código Delphi [-]
TDateTime = type Double;

Sería equivalente a usar:
Código Delphi [-]
Dataset.FieldByName('Fecha Nacimiento').AsFloat := DBfechanac.Date;
...
DBfechanac.Date := Dataset.FieldByName('Fecha Nacimiento').AsFloat;

Aunque visualmente queda más claro como ha escrito [duilioisola].

donpedro 07-08-2019 19:27:22

Solucionado
 
Gracias por la ayuda brindada

Lo resolvi colocando el campo FechaNacimiento en la base de datos de tipo DATETIME. Antes solo estaba en DATE.


La franja horaria es GMT +2. Ahora son las 22:39:29.

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