Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Poner un campo de fecha a 'Null' (https://www.clubdelphi.com/foros/showthread.php?t=27738)

gluglu 29-11-2005 16:49:23

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 !

jhonny 29-11-2005 18:08:52

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...

gluglu 29-11-2005 18:19:24

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

gluglu 29-11-2005 18:54:06

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'

roman 29-11-2005 20:38:17

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

gluglu 29-11-2005 23:43:07

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 !


La franja horaria es GMT +2. Ahora son las 03:11:13.

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