Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-09-2021
maildarofer maildarofer is offline
Registrado
 
Registrado: dic 2010
Posts: 4
Poder: 0
maildarofer Va por buen camino
Problemas con FireDac Delphi 10.4 y asignar valor Null con DateTimePicker

Hola a tod@s. Aunque llevo siguiendo el Foro desde hace tiempo, esta es mi primera intervención.
Siempre he trabajado con Delphi 7, pero ahora he dado el salto a Delphi 10.4 con FireDac y Mysql
y me he encontrado con un problemilla que ojalá me puedan resolver.
Cuando preparo una consulta para actualizar unos campos lo he hecho siempre de esta manera, es decir, primero monto la consulta utilizando parámetros
y después según el valor que tenga el TDateTimePicker pues asigno un valor Null o su fecha, de la siguiente manera:
//-----------
Código Delphi [-]
FDQuery.SQL.Add('UPDATE tabla ');
FDQuery.SQL.Add('fecha_nacimiento = :fecha_nacimiento');
FDQuery.SQL.Add('WHERE id = :id ');

if (DatetimePicker1.Format <> '') then FDQuery.ParamByName('fecha_nacimiento').IsNull
else FDQuery.ParamByName('fecha_nacimiento').AsDate := DatetimePicker1.Date;

FDQuery.ParamByName('id').AsInteger := StrToInt(LabeledEdit1.Text);

FDQuery.ExecSQL;
//------------
Con Delphi 7 este código funciona correctamente y me actualiza el campo en base de datos (tipo Date) a Null
si el DataTimePicker está vacío o me pone la fecha seleccionada en caso contrario.
Pero FireDac me da un error al asignarle Null, me dice:
Cita:
" [FireDAC] [Phys] [Mysql] -335. Parameter [FECHA_NACIMIENTO] data type is unknown. Hint: specify
TFDParam.DataType or assign TFDParam value before Prepare/Execute call. "
Sé que la forma de asignar el valor Null con este nuevo componente no es la correcta, y según el mensaje
de error debo de especificarle el tipo de dato, pero no sé como hacerlo. Espero que me puedan ayudar.
Gracias.

Última edición por Casimiro Notevi fecha: 03-09-2021 a las 10:37:06.
Responder Con Cita
  #2  
Antiguo 03-09-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, no olvides usar las etiquetas cuando pongas código, ejemplo:

En cuanto a tu código, aparte de que no sé para qué poner a null un campo, hay un par de errores a simple vista:
Código Delphi [-]
SQL.Add('fecha_nacimiento =
Falta el set
Código Delphi [-]
SQL.Add('set fecha_nacimiento =
Y lo otro es esto:
Código Delphi [-]
if (DatetimePicker1.Format <> '') then FDQuery.ParamByName('fecha_nacimiento').IsNull
else FDQuery.ParamByName('fecha_nacimiento').AsDate := DatetimePicker1.Date;
No tiene una sintaxis correcta, si format<>'' then fecha_nacimiento.AsDate := null // por ejemplo.
O también:
Código Delphi [-]
if (DatetimePicker1.Format <> '') and FDQuery.ParamByName('fecha_nacimiento').IsNull
then FDQuery.ParamByName('fecha_nacimiento').AsDate := DatetimePicker1.Date;
Realmente no se sabe qué quieres hacer ahí.
Responder Con Cita
  #3  
Antiguo 03-09-2021
maildarofer maildarofer is offline
Registrado
 
Registrado: dic 2010
Posts: 4
Poder: 0
maildarofer Va por buen camino
Problemas con FireDac Delphi 10.4 y asignar valor Null con DateTimePicker

Gracias por responder y por las indicaciones.
El "Set" si lo utilizo, ha sido un descuido al copiar y pegar, gracias.
Lo de poner a Null un campo es porque en base de datos los campos tipo Date suelo dejarlos a NULL cuando no tienen valor.
Es por ello que cuando el componente DateTimePicker en un formulario lo dejo en blanco quiero que el campo correspondiente de base de datos "fecha_nacimiento" lo
deje a NULL y si selecciono una fecha en el formulario me guarde la fecha en base de datos.
No se si será una buena praxis, pero lo llevo haciendo bastante tiempo y funciona bien.
El problema es justamente al asignarle el valor NULL al parámetro para que al realizar el UPDATE me ponga el campo de BBDD a NULL.
Espero haberme explicado bien. Gracias.
Responder Con Cita
  #4  
Antiguo 03-09-2021
maildarofer maildarofer is offline
Registrado
 
Registrado: dic 2010
Posts: 4
Poder: 0
maildarofer Va por buen camino
Esto es lo que me da el error:

Código Delphi [-]
if (DatetimePicker1.Format <> '') then FDQuery.ParamByName('fecha_nacimiento').AsDate := null


Me sigue saliendo el error indicado anteriormente,:
" [FireDAC] [Phys] [Mysql] -335. Parameter [FECHA_NACIMIENTO] data type is unknown. Hint: specify
TFDParam.DataType or assign TFDParam value before Prepare/Execute call. "

No sé de que otra forma podré asignarle el valor Null.
Responder Con Cita
  #5  
Antiguo 03-09-2021
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
La primera vez que se ejecuta una query si no has definido los parámetros de forma persistente indicando su tipo el analizador no sabe lo qué son así que debes decírselo de forma explícita si pretendes pasar un null para que sepa que tipo de null debe poner.
No uso Delphi 10 pero me he encontrado ese problema ya en Delphi 5 y lo soluciono así:
Código Delphi [-]
      parambyname('campo1').DataType:= ftDateTime;
Responder Con Cita
  #6  
Antiguo 03-09-2021
maildarofer maildarofer is offline
Registrado
 
Registrado: dic 2010
Posts: 4
Poder: 0
maildarofer Va por buen camino
Thumbs up

Muchas gracias!. Tenías razón.
Le he indicado el tipo de dato "ftDate" que para ello he tenido que añadir la librería Data.DB, sino me decía Error: ftDate Undeclared
Luego esto me daba error
Código Delphi [-]
FDQuery.ParamByName('fecha_nacimiento').AsDate := null;

Y he tenido que ponerlo así:

Código Delphi [-]
FDQuery.ParamByName('fecha_nacimiento').DataType := ftDate;
FDQuery.ParamByName('fecha_nacimiento').Clear();

Y como decía antes, he tenido que añadir la librería:
Código Delphi [-]
USES Data.DB;

Solucionado!!. Muchas gracias a todos por vuestra ayuda.
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
Se puede en delphi asignar un valor a varias variables a la vez JoAnCa Varios 2 07-01-2011 18:22:25
AsDateTime asignar NULL Cañones Conexión con bases de datos 8 22-12-2008 23:21:47
horas DateTimePicker NULL?? metroyd Varios 5 19-05-2008 19:33:17
DATETIMEPICKER no admite fechas NULL Jose Manuel Varios 4 05-05-2008 09:01:34
Exite función para asignar otro valor si es null JavierO Varios 6 04-08-2005 18:22:56


La franja horaria es GMT +2. Ahora son las 00:40: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