Delphi - Programador

 
Vista:

Programador

Publicado por Jose Luis (5 intervenciones) el 09/08/2005 19:23:13
Hola a Todos:

Tengo una variable fecha (TdateTime) que cuando no tiene valor y la remplazo en un campo de una base de datos le pone la fecha de 1899. esto es siempre que esta vacio la variable fecha le asigna un valor de 1899 y yo quiero que lo deje el campo en blanco NO con 1899.

var
fecha : Tdatetime;

// aqui fecha puede tener un valor o no

showmessage(datetostr(fecha)); // nos muestra si esta en blanco 1899.

AdsTable1.fieldbyname('fechallega').asdatetime:= fecha;

// graba a fechallegada:=1899 y eso esta mal debe ser en blanco porque no hay fecha de llegada.

E tratado de inicializar fecha en blanco pero no e podido.

Porfavor Ayudenme . Gracias.

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Programador

Publicado por Kwerty (1 intervención) el 09/08/2005 21:18:14
Delphi inicializa las variables globales a 0, por lo que al pasarlo a DateTime se convierte en 1899. Si no está inicializada o no es una variable global puede contener cualquier cosa.
Lo que debes hacer es, si no vas a inicializar la fecha, hacer que la base de datos ponga por defecto valor 0 o null el campo si no se introduce nada.
Si quieres iniciar una fecha como 00/00/0000 en Delphi debes hacer algo como esto:

Fecha1:=-693594;

De todas maneras esta es una solución algo marrullera. Lo ideal es dejar el valor por defecto de los campos en la base de datos.

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Programador

Publicado por Alejandro Sevilla (18 intervenciones) el 09/08/2005 22:15:11

Las variables tipo TDate y TdateTime pueden manejarse tambien como variables enteras, esto con el objetivo de que puedas realizar operaciones aritmeticas con ellas y cada numero entero que agregues o quites sera un dia mas (o menos) a la fecha establecida. Para muchos programas ya sea lenguajes de programacion o aplicaciones tipicas de Windows, la fecha standard de inicializacion es

30/12/1899 (cuando la variable tipo TDateTime es 0)

Como un ejemplo tu puedes hacer esto:

fecha:=3; // arrojara como resultado 02/01/1900 pues son 3 dias despues de la fecha //standard

Y si quieres referirte a una fecha anterior debes asignar un numero negativo, entonces
si quieres que tu fecha comience en 00/00/0000 seria:

fecha:=-693865;

ya que -693865 es la cantidad exacta de dias que hay entre 00/00/0000 y 30/12/1899



Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

correccion

Publicado por Alejandro Sevilla (18 intervenciones) el 09/08/2005 22:50:59

Jose Luis, disculpa, en realidad le puedes dar un valor negativo inmenso a la variable fecha y aun asi te dara 00/00/0000

por ejemplo

fecha:=-1000000;

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Gracias Mil !!

Publicado por Jose Luis (5 intervenciones) el 10/08/2005 02:33:40
Muchas Gracias !! resulto como lo esplicaron......
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Gracias Mil !!

Publicado por Luis (17 intervenciones) el 13/08/2005 18:57:35
Bueno si mal no recuerdo puedes almacener nil en tu campo date ¿o no? lo que si estoy seguro es que si usas la funcion datetostr y la variable date no ha sido asignada, te retornara '' (cadena vacia) por lo tanto, segun como guardes la info en la BD tambien te serviria

mitabla.fieldbyname('mifecha').asstring := datetostr(miVarDate);

o

if datetostr(miVarDate) = '' then mitabla.fieldbyname('mifecha').value := nil else mitabla.fieldbyname('mifecha').asdatetime := miVarDate;

saludos!!!

(respuesta al vuelo, posibles horrores al compilar :P )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar