Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-05-2016
mblascog mblascog is offline
Miembro
 
Registrado: may 2006
Posts: 131
Poder: 18
mblascog Va por buen camino
Controlar si una tabla está vacía

Buenas,
Tengo un dbgrid que apunta a una tabla y al lado los típicos botones de añadir, modificar y borrar. La pregunta es: en qué evento o donde, tengo que mirar si la tabla está vacía para activar o desactivar dichos botones, es decir, quiero poner enabled=false al botón borrar si la table está vacía, por ejemplo
Pero la cosa se complica ya que esta tabla la tengo unida a otra (mastersource), también con los botones de añadir, modificar y borrar. Conforme me voy desplazando por el dbgrid principal, la tabla secundaria, lógicamente, también cambia de registros, y quiero activar o desactivar botones según el caso.

Gracias.
Responder Con Cita
  #2  
Antiguo 21-05-2016
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola

Usa la propiedad isempty despues de activar el dataset.

Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #3  
Antiguo 21-05-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mblascog.

El boton borrar no esta habilitado si la tabla está vacía; solo están habilitados los botones: insertar, editar y refrescar; lo que me parece un comportamiento lógico.

Pero de todos modos si tu intención es deshabilitar todos los botones cuando no haya datos en la tabla, creo que un evento adecuado es OnDataChange de los TDataSources. Y para comprobar la existencia de datos, la propiedad IsEmpty como ya lo dijo Caminante
Código Delphi [-]
...
interface
...
type
  // Para acceder a la propiedad protegida Buttons:
  TDBNavigator = class(DBCtrls.TDBNavigator); 

  TForm1 = class(TForm)
  ...

implementation

// DataSource Detail - OnDataChange
procedure TForm1.dsDetailDataChange(Sender: TObject; Field: TField);
var
  i : TNavigateBtn;
begin
  for i := Low(TNavigateBtn) to High(TNavigateBtn) do
    DBNavigatorDetail.Buttons[i].Enabled := not dsDetail.DataSet.IsEmpty;
end;

// DataSource Master - OnDataChange
procedure TForm1.dsMasterDataChange(Sender: TObject; Field: TField);
var
  i : TNavigateBtn;
begin
  for i := Low(TNavigateBtn) to High(TNavigateBtn) do
    DBNavigatorMaster.Buttons[i].Enabled := not dsMaster.DataSet.IsEmpty;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 21-05-2016
mblascog mblascog is offline
Miembro
 
Registrado: may 2006
Posts: 131
Poder: 18
mblascog Va por buen camino
Creo que no me he expresado bien. Tengo un dgbrid con registros, y un segundo dbgrid que apunta a otra tabla pero unido al primero. Cada vez que selecciono un registro del primer dbgrid, el segundo puede o no contener registros, por lo que no se trata de mirar la propiedadi isEmpty del dataset al activarlo.
Responder Con Cita
  #5  
Antiguo 21-05-2016
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Yo creo que si.

EL DBGrid esta conectado a un datasource y este a un dataset. Para ver si el dataset esta vacio mira el valor de la propiedad isempty.
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #6  
Antiguo 21-05-2016
mblascog mblascog is offline
Miembro
 
Registrado: may 2006
Posts: 131
Poder: 18
mblascog Va por buen camino
Caminante, yo buscaba algo parecido al evento onStateChange del datasource, que es automático. Si tengo que comprobar si el dataset isEmpty, cada vez que se cambia de registro tengo que comprobarlo
Responder Con Cita
  #7  
Antiguo 21-05-2016
rocksoft rocksoft is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 71
Poder: 8
rocksoft Va por buen camino
Hola Caminante,

que tal con un if db1.RecordCount > 0 then...
Responder Con Cita
  #8  
Antiguo 22-05-2016
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Bueno no confio mucho en recordcount ya que puede variar de acuerdo al tipo de dataset y a veces puede no devolver el valor correcto.

Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #9  
Antiguo 22-05-2016
mblascog mblascog is offline
Miembro
 
Registrado: may 2006
Posts: 131
Poder: 18
mblascog Va por buen camino
En realidad mi pregunta no es cómo saber si un dataset está vacío o no, hay varias maneras de controlarlo. Lo que es estoy buscando es la manera automática de detectarlo, en qué evento
Responder Con Cita
  #10  
Antiguo 22-05-2016
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
En el mensaje 3 el compañero ecfisa te sugirio el evento ondatachage del datasource.

Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #11  
Antiguo 22-05-2016
mblascog mblascog is offline
Miembro
 
Registrado: may 2006
Posts: 131
Poder: 18
mblascog Va por buen camino
El ondatachange salta cuando cambias algún valor, no cuando cambian los registros.
Responder Con Cita
  #12  
Antiguo 22-05-2016
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Tambien puedes probar el evento afterscroll del dataset.
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #13  
Antiguo 22-05-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por mblascog Ver Mensaje
El ondatachange salta cuando cambias algún valor, no cuando cambian los registros.
De la ayuda de Delphi:
Cita:
Occurs when the data in a record has changed, either due to field edits or moving the cursor to a new record.
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #14  
Antiguo 22-05-2016
mblascog mblascog is offline
Miembro
 
Registrado: may 2006
Posts: 131
Poder: 18
mblascog Va por buen camino
Gracias ecfisa, llevas toda la razón, yo lo hacía con el onStateChange en lugar de onDataChange.
Responder Con Cita
  #15  
Antiguo 23-05-2016
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Usa un taction de tipo delete(mira en los tipos de acciknes) y al relacionarse con el dataset todo se hace solo, lo asignas al botón y listo mijo lindo.

Enviado desde mi SM-G900H mediante Tapatalk
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #16  
Antiguo 23-05-2016
mblascog mblascog is offline
Miembro
 
Registrado: may 2006
Posts: 131
Poder: 18
mblascog Va por buen camino
Gracias rastafarey, pero no entiendo mucho a que te refieres. Lo siento
Responder Con Cita
  #17  
Antiguo 30-05-2016
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Si tienes un datasource conectado a un dataset, creas un tactiondelete (mira en lista de los taction a ver si ese el nombre) y esa action le asignas el datasource, ya no tienes que controlar el botón porque el datasource se encarga de habilitar o desahabilitar él estado de dicho boton, asi también pueder usar para edit, insert o cualquier accion que se pueda aplicar a dicha nase de datos. Es lo mismo que tener un tnavigator, pero con taction y botones del tipo que yi quieras.

Enviado desde mi SM-G900H mediante Tapatalk
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #18  
Antiguo 30-05-2016
mblascog mblascog is offline
Miembro
 
Registrado: may 2006
Posts: 131
Poder: 18
mblascog Va por buen camino
Gracias rastafarey. Tengo que mirarlo, pues desconozco de lo que me hablas, pero me parece muy interesante
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Traer un valor de un campo de la Tabla (Access) incluso si esta vacia nefore Conexión con bases de datos 4 16-06-2013 22:45:58
Añadir registro en tabla firebird si la tabla está vacia jafera Firebird e Interbase 19 22-08-2012 11:59:35
SelectedRows esta vacia Paulao Varios 2 12-03-2009 10:26:07
preguntar por una imagen si esta vacia ingel Gráficos 2 10-05-2007 19:22:14
¿No se puede desactivar un ADOTABLE cuando la tabla está vacia? User_Baja_2 Conexión con bases de datos 1 12-06-2004 18:35:24


La franja horaria es GMT +2. Ahora son las 06:12:38.


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
Copyright 1996-2007 Club Delphi