Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-02-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 264
Poder: 2
pgranados Va por buen camino
Question Campo tipo date marcado como NULL retorna una fecha extraña (3/12/1899)

Buen día, ¿Alguien ha tenido el error comentado en el titulo, tengo un registro en mi tabla donde el campo FECHA viene como NULL , pero al hacer la validación en Delphi (Ya que, si el valor es Nulo, debo de insertar la fecha del día de hoy, pero si Fecha tiene algún valor debo de dejarlo como esta) me retorna una fecha extraña (30/12/1899)

La validación la hago de la siguiente manera:
Código Delphi [-]
if DateToStr(DM.FDQueryFecha.Value) = '' then
begin
DM.FDQuery.Edit;
DM.FDQueryFecha.Value:= now;
DM.FDQuery.Post;
showMessage('Fecha Actualizada');
end;

Saludos.

Última edición por pgranados fecha: 15-02-2023 a las 18:52:44.
Responder Con Cita
  #2  
Antiguo 15-02-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 264
Poder: 2
pgranados Va por buen camino
Estuve investigando, y realmente sucede esto porque el campo Date nunca se queda como NULL, solamente toma una "Fecha Random?"

Total, esta fecha: 30/12/1899 ¿es la que se queda fija? o siempre cambiara?

Saludos
Responder Con Cita
  #3  
Antiguo 15-02-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es que al ser null, se interpreta como cero, y firebird cuenta los días a partir del 30/12/1899 por lo que 1 es 31/12/1899, 2 es 01/01/1900, etc...
Lo que debes hacer es algo como: if fecha is null then fecha = now;
O la fecha por defecto que te venga mejor.
Responder Con Cita
  #4  
Antiguo 15-02-2023
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
¡Hola, pgranados!

No es una fecha random, el cálculo de fechas en Delphi empieza desde el 30/Dic/1899. En un valor numérico (Double) que va aumentando desde ese día.

System.TDateTime
Cita:
TDateTime implementa el tipo de datos Delphi TDateTime y las rutinas de biblioteca de tiempo de ejecución de fecha/hora que utilizan el tipo de datos TDateTime.

La clase TDateTime hereda un miembro de datos val, declarado como double, que contiene el valor de fecha y hora. La parte entera de un valor TDateTime es el número de días que han pasado desde el 30 de diciembre de 1899. La parte fraccionaria de un valor TDateTime es la hora del día. La fecha correcta máxima admitida por los valores TDateTime está limitada al 31/12/9999 23:59:59:999. Todos los valores que van más allá de esta fecha causan errores y excepciones en la mayoría de las rutinas que operan con valores TDateTime.
Entonces:
0 = 30/12/1899
2.75 = 1/Ene/1900; 6:00 P.M.
35065 = 1/Ene/1996; 12:00 A.M
44972 = 15/Feb/2023; 12:00 A.M.

Cuando en tu consulta validas el campo de fecha y en la tabla está como null. Al leerlo como TDateTime, se convierte a 0 y por lo tanto a la fecha que indicas.

Si lo que debes validar es si el campo está null puedes usar la función IsNull.

Código Delphi [-]
if DM.FDQueryFecha.isNull then
begin
  DM.FDQuery.Edit;
  DM.FDQueryFecha.Value:= now;
  DM.FDQuery.Post;
  showMessage('Fecha Actualizada');
end;
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #5  
Antiguo 15-02-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 264
Poder: 2
pgranados Va por buen camino
Gracias Casimiro y movorack, de gran ayuda. Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Campo Fecha de tipo Date se guarda como Blob GUN10 Varios 1 15-03-2016 12:06:45
30/12/1899 cuando fecha en campo es null ? Loviedo Firebird e Interbase 4 21-02-2013 12:36:29
asignar fecha a un campo de tipo DATE liito16 OOP 2 09-09-2010 15:48:23
Como seleccionar de una campo tipo date solo el dia Gaby123 Conexión con bases de datos 1 06-09-2006 16:55:50
Como filtrar un campo tipo Date en una Tabla? JuanErasmo C++ Builder 6 21-12-2005 09:24:59


La franja horaria es GMT +2. Ahora son las 10:22:54.


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
Copyright 1996-2007 Club Delphi