Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Varios
Register FAQ Members List Calendar Guía de estilo Today's Posts

Coloboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 03/09/2021
maildarofer maildarofer is offline
Registrado
 
Join Date: Dec 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:
Quote:
" [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.

Last edited by Casimiro Noteví : 03/09/2021 at 10:37.
Reply With Quote
  #2  
Old 03/09/2021
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,700
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví 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í.
Reply With Quote
  #3  
Old 03/09/2021
maildarofer maildarofer is offline
Registrado
 
Join Date: Dec 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.
Reply With Quote
  #4  
Old 03/09/2021
maildarofer maildarofer is offline
Registrado
 
Join Date: Dec 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.
Reply With Quote
  #5  
Old 03/09/2021
kuan-yiu's Avatar
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Join Date: Jun 2006
Location: Galicia. España.
Posts: 1,017
Poder: 22
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;
Reply With Quote
  #6  
Old 03/09/2021
maildarofer maildarofer is offline
Registrado
 
Join Date: Dec 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.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Se puede en delphi asignar un valor a varias variables a la vez JoAnCa Varios 2 07/01/2011 18:22
AsDateTime asignar NULL Cañones Conexión con bases de datos 8 22/12/2008 23:21
horas DateTimePicker NULL?? metroyd Varios 5 19/05/2008 19:33
DATETIMEPICKER no admite fechas NULL Jose Manuel Varios 4 05/05/2008 09:01
Exite función para asignar otro valor si es null JavierO Varios 6 04/08/2005 18:22


All times are GMT +2. The time now is 08:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi