Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Asignar valor nulo a un entero (https://www.clubdelphi.com/foros/showthread.php?t=47398)

Shikanda 27-08-2007 12:19:09

Asignar valor nulo a un entero
 
Hola a todos
Soy nuevo en el foro y nuevo con el delphi (de hecho soy incluso nuevo como programador) por lo que todavia hay cosas que no tengo muy claras.

Os explico. Es tan sencillo como un gestor de citas. Cada dia se van a programar unas citas para unas horas y estoy haciendo la funcion para que se puedan eliminar citas. Os muestro el código:
Código Delphi [-]
 
procedure TFCreaCitas.btnEliminarClick(Sender: TObject);
var respuesta: word;
begin
  respuesta:= MessageDlg('Eliminar cita?', mtconfirmation, [mbYes, mbNo], 0);
        If respuesta=mrYes then begin
                showmessage('Cita eliminada');
 
        DMCitasCalendario.QIntervalo.Edit;
        DMCitasCalendario.QIntervaloDESCRIPCION.AsString := '';
        DMCitasCalendario.QIntervaloUSUARIO.AsInteger := null ;
        DMCitasCalendario.QIntervaloNOM_USUARIO.AsString := '';
        DMCitasCalendario.QIntervaloLOGIN.AsString := '';
El campo QIntervaloUSUARIO es de tipo entero y recoge el numero del usuario de tenia concertada la cita. Intento ponerlo a null pero me da un error de tipo: "could not convert variant of type (null) into type (integer)". Por tanto, supongo que a los enteros no se les puede asignar el valor null (no, al menos, "a pelo"). Si le asigno un valor numérico (por ejemplo, cero) lo coge perfectamente. He intentado poner QIntervaloUSUARIO.AsString := '' pero, aunque no da fallo, no cambia nada. Sé que es una chorrada de problema, pero le doy vueltas y no sé como hacerlo.

Gracias a los que os molesteis en respondedme y un saludo :)

marcoszorrilla 27-08-2007 12:57:31

Con el código que indicas no eliminas la cita, solamente la vacías, tendrías que aplicar:
Código Delphi [-]
DMCitasCalendario.QIntervalo.Edit;
DMCitasCalendario.QIntervalo.Delete;

Según releo, quizás lo que quieres sea:
Código Delphi [-]
 DMCitasCalendario.QIntervaloUSUARIO.Clear ;
Un Saludo.

Shikanda 27-08-2007 13:02:51

Bueno, tienes razón. No me expliqué bien. No quiero eliminar el registro en sí, quiero dejarlo vacío, visible de que ese día a esa hora no hay ninguna cita concertada.

EDITO:

No se me ocurrió mirar las propiedades del Query. He probado tanto con .Clear como con .IsNull (no sé cómo no se me ocurrió antes) y me pasa algo que paso a explicar.


Código Delphi (todavía no sé cómo lo formateais :P)

showmessage(DMCitasCalendario.QIntervaloUSUARIO.AsString);
DMCitasCalendario.QIntervaloUSUARIO.Clear;
showmessage(DMCitasCalendario.QIntervaloUSUARIO.AsString);
DMCitasCalendario.QIntervaloUSUARIO.IsNull;
showmessage(DMCitasCalendario.QIntervaloUSUARIO.AsString);


Así he visto cómo tanto con .Clear como con .IsNull borra el entero que había antes, pero no sé porqué no lo guarda. He mirado la base de datos (Firebird) y este campo admite nulos, no es ni clave única ni primaria ni nada, por lo que no sé qué problema hay. Las soluciones que me diste, Marcos, funcionan, pero no lo guarda (y cuando le asigno a pelo .Value=3000 sí lo coge).

Si al menos pudieras/pudiérais orientarme un poco en qué tipo de problema puedo tener, os lo agradecería. Y si necesitais mas información no teneis más que pedirlo.

Gracias de nuevo :)

Shikanda 27-08-2007 14:26:23

Por cierto, he probado con

DMCitasCalendario.QIntervalo.Post;
DMCitasCalendario.QIntervalo.UpdateSQL;
DMCitasCalendario.QIntervalo.RefreshSQL;

Y le da lo mismo una que otra que las 3 :confused:


La franja horaria es GMT +2. Ahora son las 21:05:35.

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