Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-11-2005
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: Sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 16
gluglu Va por buen camino
Poner un campo de fecha a 'Null'

Hola Amigos !

Tengo un problema cuanto menos curioso. Lo que yo precisamente quiero es poner un campo de fecha a 'Null' !

Mi problema es cuando previamente ese campo YA CONTENIA una fecha !

Tengo un DBEdit, si el campo es Null y no introduzco caracter alguno, perfecto. Pero si previamente había introducido una fecha y vuelvo a editar el campo, no tengo manera de borrar la fecha completamente ! Si pongo todo a 0 me dá error diciendo que no es fecha válida. Y caracteres 'espacio' no me deja.

Indicar que tengo puesto una máscara EditMask = '!99/99/0099;1;_'

Un saludo a todos !
Responder Con Cita
  #2  
Antiguo 29-11-2005
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: May 2003
Ubicación: Colombia
Posts: 7.031
Poder: 23
jhonny Va camino a la fama
Que sucede si usas este truquito?

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin 
  TDataset.Edit;
  TDataset.FieldByName('Fecha').Clear;
  TDataset.Post;
end;

Donde TDataset es el TDataSet que estes usando... TTable, TQuery, TRxMemoryTable, T...
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 29-11-2005 a las 18:10:30. Razón: Quedo mal escrito TTable
Responder Con Cita
  #3  
Antiguo 29-11-2005
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: Sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 16
gluglu Va por buen camino
No había pensado en la solución tuya.

No obstante, creo que no me soluciona mi asunto en el momento de la edición por parte del usuario en pantalla del campo correspondiente.

Tengo p.ej. 01/01/2005 grabado ya previamente en el DataSet asociado. Entonces al pedir la edición en pantalla del DBEdit, me aparece, claro está, por defecto 01/01/2005 en pantalla. (Tengo la propiedad AutoSelect a True).

Si ahora el usuario pulsa 'Supr' (con lo que el campo DBEdit se queda como '__/__/____') y enter, el Delphi me devuelve un error interno de fecha no válida antes de poder inteceptarlo por ningún evento (... no es verdad?).

Y por lo tanto no veo la manera de salir de dicho DBEdit para utilizar en su caso la funcion 'Clear' que propones.

P.D. Indicar que utilizo Delphi 2005.

Gracias de nuevo
Responder Con Cita
  #4  
Antiguo 29-11-2005
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: Sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 16
gluglu Va por buen camino
Aunque ponga un botón adicional para poner el campo de fecha a 'null'
Código Delphi [-]
IBQuery.FieldByName('DATEFROM').Clear;
me dá error : 'Invalid variant type conversion of Null variant into TDateTime'
Responder Con Cita
  #5  
Antiguo 29-11-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: May 2003
Ubicación: Ciudad de México
Posts: 20.174
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Cita:
Empezado por gluglu
no tengo manera de borrar la fecha completamente ! Si pongo todo a 0 me dá error diciendo que no es fecha válida. Y caracteres 'espacio' no me deja.

Indicar que tengo puesto una máscara EditMask = '!99/99/0099;1;_'
Me parece que tu problema entonces no es como poner en null el campo en la tabla sino en el dbedit. Quizá podrías usar un truquito de poner una máscara vacía cuando el usuario borre el control. De esta manera, aun cuando el control contenga internamente la fecha por defecto, al usuario le aparece en blanco. Al momento de guardar el registro (en el evento OnBeforePost) te fijas si la máscara está vacía, lo que indicaría que uses el método Clear que te indicaron.

// Saludos
Responder Con Cita
  #6  
Antiguo 29-11-2005
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: Sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 16
gluglu Va por buen camino
Gracias Roman,

Tu consejo me encaminó bien, aunque me quedan ciertas dudas.

La solución que le he dado :
Código Delphi [-]
procedure TFrame.DBEdit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  If Key = VK_DELETE then
    If DBEdit1.Text = '  /  /    ' then begin
      IBQuery1DATEFROM.EditMask   := '';
      IBQuery1DATEFROM.OnValidate := nil;
      DBEdit1.Text := '';
      IBQuery1.Edit;
      IBQuery1.Post;
      IBQuery1DATEFROM.EditMask   := '!99/99/9900;1;_';
      IBQuery1DATEFROM.OnValidate := IBQuery1DATEFROMValidate;
      DBEdit1.SetFocus;
    end;
end;
El problema adicional que tenía es que el campo correspondiente tiene un evento OnValidate, y si simplemente ponía el texto del DBEdit en blanco, entonces en el evento OnValidate me volvía a salir el mismo error 'Invalid variant type conversion of Null variant into TDateTime'.

Mi duda sigue siendo por qué no me funciona (al menos en mi Delphi 2005), la función Clear con el campo de fecha, ya que me dá el error que indico arriba.

Y también agradecería si alguien me pudiera aclarar como poder ejecutar correctamente este comando :
Código:
IBQuery1DATEFROM.AsVariant := null;
Un saludo de nuevo a todos !
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 16:07:08.


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