Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-01-2010
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
Post Evento de DBCheckBox para modificar datos

Hola a todos,

trabajo con D7 y SQL 2005 Express, en un form muestro los datos de un qry, entre ellos un DBCheckBox el cual tiene el siguiente código en el evento onclick :
Código Delphi [-]
procedure TFEdtarPARTESLIN.DBCheckEXTRAClick(Sender: TObject);
begin
  if DBCheckEXTRA.Checked then
  begin
    if MessageDlg('Atención !!!!'+#13+#10+''+#13+#10+
       'Se asignarán todas las Horas como Horas Extras.'+#13+#10+''+#13+#10+
       '¿ Desea continuar ?', mtWarning, [mbYes, mbNo], 0) = mrYes then
      CalculaHoras;
  end;
end;
la rutina CalculaHoras calcula y distribuye los valores calculados en diferentes campos, eso funciona perfectamente.

Lo curioso, o al menos a mí me lo parece, es que al mostrar el form con showmodal se ejecuta ese código, con lo cual entiendo que se está disparando el evento TFEdtarPARTESLIN.DBCheckEXTRAClick y no lo encuentro muy normal... o si ??

La aplicación calcula partes horarios de trabajadores, distribuye las horas en función de un calendario laboral y unos turnos de trabajo, pero necesitan un proceso manual para "asignar" determinadas horas como horas extras , si, si... a mí también me gustaría un jefe así

Así que añadí un campo boolean a la tabla para determinar si esas horas eran "asignadas manualmente" como extras y es ese el campo del DBCheckBox.

Si a alguien se le ocurre otra forma mejor de solventarlo, se admiten propuestas

Saludos y Gracias
__________________
Toni | blog
Responder Con Cita
  #2  
Antiguo 28-01-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por tgsistemas Ver Mensaje
Lo curioso, o al menos a mí me lo parece, es que al mostrar el form con showmodal se ejecuta ese código, con lo cual entiendo que se está disparando el evento TFEdtarPARTESLIN.DBCheckEXTRAClick y no lo encuentro muy normal... o si ??
Supongo que la rutina salta debido a la carga de datos desde la Base de Datos. Igual que si programas el evento OnChange de un campo de texto.

A mi a prori tampoco me parece normal, pero me da la impresión de que así es.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 28-01-2010
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
Hola de nuevo Neftali, lo siento debo ser tu cruz

he probado esto
Código Delphi [-]
 
procedure TFEdtarPARTESLIN.DBCheckBoxPLUSIDIOMASClick(Sender: TObject);
begin
MessageDlg('si se ve esto... algo va mal !!!', mtWarning, [mbOK], 0);
end;
y no se dispara al mostrar el form !!!! no entiendo nada.

Abusando de tu buen hacer, se te ocurre otra alternativa para lo comentado de las horas extras ??

Saludos y Muchas Gracias
__________________
Toni | blog
Responder Con Cita
  #4  
Antiguo 28-01-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por tgsistemas Ver Mensaje
y no se dispara al mostrar el form !!!! no entiendo nada.
Abusando de tu buen hacer, se te ocurre otra alternativa para lo comentado de las horas extras ??
Más que al mostrar el form me da laimpresión de que debe ser al abrir la Query/tabla lo que provoca que se rellenen los controles DataAware.

Yo en algun caso lo que he hecho es levantar un flag antes de abrir, y bajarlo una vez abierta la consulta. En los eventos se filtran todos aquellos que llegan mientras el flag está activo.
No se si esta solución te puede servir a tí.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 28-01-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Otra opción que acabo de ver en la web de About.com es que puedes desactivar "temporalmente" el evento OnClick. El efecto sería el comentado en el mensaje anterior.

link.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 28-01-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

El problema es que el evento OnClick del DBCheckBox se va a ejecutar cuando al navegar por los registros, se haga el cambio de estado, algo asi como un evento OnChange. Eso se puede verificar en el codigo de la VCL del mismo componente, mas concretamente en la clase ancestra del TDBCheckBox.
Cita:
Sacado de la VCL->
Código Delphi [-]
procedure TCustomCheckBox.Click;
begin
  inherited Changed;//<----He aqui el Problema 
  inherited Click;
end;
.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #7  
Antiguo 28-01-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En ese caso tal vez se podría combinar con el State del Dataset para verificar que se está modificando el valor y no cargándolo.

Supongo que habrá diferencia de estado cuendo se está navegando a cuando realmente el usuario lo modifica (edita).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 28-01-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por Neftali Ver Mensaje
En ese caso tal vez se podría combinar con el State del Dataset para verificar que se está modificando el valor y no cargándolo.

Supongo que habrá diferencia de estado cuando se está navegando a cuando realmente el usuario lo modifica (edita).
Concuerdo contigo, Germán. Pensando en una solución simple, basta con agregar una condición más al If del manejador de evento.

Código Delphi [-]
procedure TFEdtarPARTESLIN.DBCheckEXTRAClick(Sender: TObject);
begin
  if DBCheckEXTRA.Checked And (ConjuntoDeDatos.State In dsEditModes) then
  begin
    if MessageDlg('Atención !!!!'+#13+#10+''+#13+#10+
       'Se asignarán todas las Horas como Horas Extras.'+#13+#10+''+#13+#10+
       '¿ Desea continuar ?', mtWarning, [mbYes, mbNo], 0) = mrYes then
      CalculaHoras;
  end;
end;

Saludos.

Al González.
Responder Con Cita
  #9  
Antiguo 30-01-2010
Avatar de tgsistemas
tgsistemas tgsistemas is offline
Miembro
 
Registrado: dic 2003
Ubicación: Barcelona
Posts: 149
Poder: 21
tgsistemas Va por buen camino
Neftali, rgstuamigo y [Al González] gracias por la ayuda

efectivamente el estado del conjunto de datos dispara ese evento así que siguiendo vuestro sabio consejo lo he dejado así :
Código Delphi [-]
  if  (DataSource.State In dsEditModes) then
  begin
    if (DBCheckEXTRA.Checked = True) then
    begin
      if MessageDlg('Atención !!!!'+#13+#10+''+#13+#10+
               'Se asignarán todas las Horas como Horas Extras.'+#13+#10+''+#13+#10+
               '¿ Desea continuar ?', mtWarning, [mbYes, mbNo], 0) = mrYes then
        CalculaHoras;
    end else begin
      if MessageDlg('Atención !!!!'+#13+#10+''+#13+#10+
               'Las Horas dejarán de considerarse como Horas Extras y se distribuirán normalmente.'+#13+#10+''+#13+#10+
               '¿ Desea continuar ?', mtWarning, [mbYes, mbNo], 0) = mrYes then
        CalculaHoras;
    end;
  end;

de esa forma sólo se ejecuta al editar, en función del Checked o Unchecked muestro un mensaje diferente pero ambos pasan por la rutina de distribución de horas.

Muchas Gracias por la ayuda, por mi parte la duda queda resuelta.

Saludos
__________________
Toni | blog
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
modificar datos con ibx lina maria Conexión con bases de datos 3 01-10-2008 16:34:54
modificar datos con ibquery mozambike Conexión con bases de datos 0 27-09-2008 23:50:47
duplicar un form para posteriormente modificar solo unos datos Ade Varios 4 13-11-2006 13:05:17
DBCheckBox para Imprimir emeritos Impresión 9 04-06-2004 18:01:49
Modificar datos de una grid gescoto99 Conexión con bases de datos 7 21-05-2004 03:02:26


La franja horaria es GMT +2. Ahora son las 06:42:44.


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