Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Saber si el registro de un dgbrid tiene algun campo vacio (https://www.clubdelphi.com/foros/showthread.php?t=76660)

Vales08 16-11-2011 23:04:59

Saber si el registro de un dgbrid tiene algun campo vacio
 
Bunas tardes!!!
Esta consulta la veo un tanto pava, pero la verdad no se como hacerla..

Tengo una grilla conectada a un dbQuery, la cual me muestra varios registros, los campos son los siguientes:

Cita:

fecha | hora | profesional | paciente
-------------------------------------
Lo que yo necesito es preguntar si el registro sobre el que estoy parada tiene el campo PACIENTE vacío o nulo, que se me habilite un botón que tengo, que se llama Agregar.. el cual lo que realiza es agregar precisamente el nombre del paciente.
Por defecto tal botón esta en enabled:=False.

Trabajo con Delphi 7, utilizo sql y motor de base de datos Firebird.

Muchas gracias de antemano, espero puedan ayudarme, sigo disponible para cualquier consulta por si no se ah entendido mi petición..
Saludos!!!

Vales08 16-11-2011 23:11:14

mas detalles
 
Perdón, me olvide detallarles que el dbgrid esta conectado a un dbQuery de la tabla AGENDA_TURNOS. Pero el campo PACIENTE viene de otra tabla, que es la tabla PACIENTES, es decir que estoy utilizando un campo virtual en el Query, por lo tanto, a mi criterio para realizar lo que necesito, tendría que trabajar directamente con los id (clave). La tabla AGENDA_TURNOS tiene la clave foránea ID_PACIENTE..

Muchas gracias..

Vales08 16-11-2011 23:51:48

Encontré una posible solución que no es acorde a lo que estaba pidiendo, pero también sirve..
Lo que realice fue agregar 3 botones:
TODOS: muestra absolutamente todos los registros que estén en ESTADO:=0; es decir que estén dados de alta.
LLENOS: muestra solo los registros que tienen el campo PACIENTE cargado.
VACÍOS: muestra solo los registros que no tienen el campo PACIENTE cargado..

Entonces si la grilla solo muestra los registros que tienen el campo PACIENTE vacío, se habilita el botón Agregar, asignándole la propiedad Enabled:=True;

Les paso el código para cada botón, para que realice el filtro.

Botón TODOS:
Código SQL [-]
DM.Q_agen_tur.SQL.Clear;
DM.Q_agen_tur.SQL.Add('select * from AGENDA_TURNOS where ESTADO=0');
DM.Q_agen_tur.Open;

Botón LLENOS:
Código SQL [-]
DM.Q_agen_tur.SQL.Clear;
DM.Q_agen_tur.SQL.Add('select * from AGENDA_TURNOS where ESTADO=0 and ID_PACIENTE is not null');
DM.Q_agen_tur.Open;

Botón VACIOS:
Código SQL [-]
DM.Q_agen_tur.SQL.Clear;
DM.Q_agen_tur.SQL.Add('select * from AGENDA_TURNOS where ESTADO=0 and ID_PACIENTE is null');
DM.Q_agen_tur.Open;
Código Delphi [-]
Boton_agregar.Enabled:=True;


Espero a alguien le sirva..
igual acepto respuestas sobre alguna otra solución o sobre lo que pedi primeramente, siempre es útil y me puede servir para otro caso o este mismo..
Muchas gracias.

ecfisa 17-11-2011 00:04:58

Hola Vales.

Respondiendo a tu primer pregunta (que un botón se habilite/deshabilite de acuerdo a si un campo está vacío o no), podrías utilizar el evento AfterScroll del query:
Código Delphi [-]
procedure TForm1.QueryAfterScroll(DataSet: TDataSet);
begin
  Button1.Enabled := Query.FieldByName('TU_CAMPO').AsString <> '';
end;

Saludos.

Vales08 17-11-2011 01:45:57

El Query lo tengo colocado en un Data Module, como hago para poder llamar al boton? porque no me deja usarlo

ecfisa 17-11-2011 11:27:56

Hola Vales.

Tendrías que anteponer el nombre del TDataModule, por ejemplo:
Código Delphi [-]
procedure TForm1.QueryAfterScroll(DataSet: TDataSet);
begin
  Button1.Enabled := TuDataModule.TuQuery.FieldByName('TU_CAMPO').AsString <> '';
end;

Saludos.

Vales08 17-11-2011 13:19:43

Claro, eso esta bien porque yo en el código siempre hago referencia a los querys y dataset con el datamodule.
Mi problema es que no puedo poner el nombre del botón en el código que me pasaste, porque no me lo reconoce y es obvio porque esta ubicado en un formulario distinto del datamodule..

No se si me logro explicar? En el data module estoy haciendo referencia a un boton que no existe en el mismo.

Muchas gracias por tu ayuda!!

ecfisa 17-11-2011 13:31:07

Cita:

Empezado por Vales08 (Mensaje 418696)
Mi problema es que no puedo poner el nombre del botón en el código que me pasaste, porque no me lo reconoce y es obvio porque esta ubicado en un formulario distinto del datamodule..
No se si me logro explicar? En el data module estoy haciendo referencia a un boton que no existe en el mismo.

Ahora te entiendo... :)

Hacé así:
Código Delphi [-]
...
 TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    ...
    procedure FormDestroy(Sender: TObject);
  private
    procedure TuQueryAfterScroll(DataSet: TDataSet);
  public
  end;
...
implementation

uses UnitDelDataModule;

procedure TForm1.TuQueryAfterScroll(DataSet: TDataSet);
begin
  Button1.Enabled := TuDataModule.TuQuery.FieldByName('TU_CAMPO').AsString <> '';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TuDataModule.TuQuery.AfterScroll:= TuQueryAfterScroll;
end;

....

procedure TForm1.FormDestroy(Sender: TObject);
begin
  TuDataModule.TuQuery.AfterScroll:= nil;
end;

end.

Un saludo.

Vales08 17-11-2011 13:33:52

Ahh perfecto, apenas lo pruebe te comento que tal me fue..
Disculpa por no haber sido clara en la pregunta..
Muchas gracias!!

ecfisa 17-11-2011 13:40:29

No tenés por que disculparte, la confusión fué mia.

Aquí:
Cita:

El Query lo tengo colocado en un Data Module, como hago para poder llamar al boton? porque no me deja usarlo
Ya habías aclarado que el query estaba en el DataModule... ;)

Saludos.:)


La franja horaria es GMT +2. Ahora son las 23:37:32.

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