PDA

Ver la Versión Completa : Is not a Valid Date Time


donpedro
07-08-2019, 02:55:35
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:

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.

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


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

y

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

Neftali [Germán.Estévez]
07-08-2019, 10:33:29
Lo correcto es trabajar con el tipo de datos sin hacer transformaciones.
+1

O dado que en la unit System.pas hay esto:
TDateTime = type Double;

Sería equivalente a usar:
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
Gracias por la ayuda brindada

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