Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Error en DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=92048)

Tecnofacil 10-07-2017 14:31:07

Error en DBGrid
 
No sabia como poner el titulo, básicamente lo que hago es poner dbcheck en dos columnas de un dbgrid, lo que necesito es que al hacer clic en el check de la segunda columna verifique, que si la primer columna esta tildada permita tildar sino que me avise, el problema es que luego del aviso, intento tildar la primer columna y me sigue tirando el mismo mensaje, revise el código y esta bien, en un paso a paso me di cuenta que cuando le doy clic a la columna "autorizado" ( o sea la primera), me sigue tomando como que clique la segunda.

oscarac 10-07-2017 15:52:44

pon algo de código, lamentablemente la imagen que has colocado al menos yo, no la puedo ver

Tecnofacil 10-07-2017 16:48:46

1 Archivos Adjunto(s)
en la primer columna tengo un tilde "autorizado" al darle clic se ejecuta este codigo
Código Delphi [-]
    if Column.FieldName='auto' then      // Se le doy clic al check que se encuentra en la columna 'Autorizado'
      begin
        if fdq_maestroauto.value = 1 then //Si esta tildado pregunto
          begin
            if Application.MessageBox('El pedido aún no esta autorizado, Confirma?','Atención',MB_YESNO)=id_yes then
              begin
                fdq_maestroauto.value := 0;    // si responde 'Si' destildo
                fdq_maestro.Post;
                Dbgrid1.Repaint;
              end;
            end
          else    //Si no esta tildado pregunto
            begin
              if Application.MessageBox('El pedido ya esta autorizado o no requiere CAI, Confirma?','Atención',MB_YESNO)=id_yes then
                begin
                  fdq_maestroauto.value := 1; //Si responde si Tildo
                  fdq_maestro.Post;
                  Dbgrid1.Repaint;
                end;
            end;
        end;

Hasta ahí todo bien, la idea es que al darle clic al segundo check, de la segunda columna sería, verifique si el primer check esta tildado, o mejor dicho, si el valor del campo "auto" es 1.
Código Delphi [-]
      if Column.FieldName='armado' then
        begin
          if fdq_maestroarmado.value = 1 then
            begin
              if Application.MessageBox('El pedido aún no esta armado, Confirma?','Atención',MB_YESNO)=id_yes then
                begin
                  fdq_maestroarmado.value := 0;
                  fdq_maestro.Post;
                  Dbgrid1.Repaint;
                end;
            end
          else
            begin
              if fdq_maestroauto.Value = 1 then // verifico si el campo anterior esta tildado
                begin
                  if Application.MessageBox('El pedido ya esta armado, Confirma?','Atención',MB_YESNO)=id_yes then
                    begin
                      fdq_maestroarmado.value := 1;
                      fdq_maestro.Post;
                      Dbgrid1.Repaint;
                    end;
                end
                else
                begin
                  MessageBox(0, 'El pedido figura como "No autorizado"', 'ATENCIÓN', MB_ICONWARNING or MB_OK);
                  DBGrid1.Refresh;
                end;
            end;
          end;

Tambien funciona de mil maravillas, pero... si luego de que se ejecute este código le doy de nuevo a la primer columna, (FieldName = 'auto'), me vuelve a mostrar el mensaje de que no esta autorizado, y en el paso a paso corrobore que en esta linea de código
Código Delphi [-]
 if Column.FieldName='auto' then
El valor de FieldName es = 'armado' en lugar de ser 'auto' que es la columna que estoy dándole clic. Es como si la variable FieldName no se actualizara.

oscarac 10-07-2017 16:54:30

en que evento se esta ejecutando ese código?

olbeup 11-07-2017 08:15:08

Hola Tecnofacil,

Esto posible que tengas que hacer un "fdq_maestro.Edit" antes de asignar ningún valor y después hacer un "fdq_maestro.Post", no veo que estes editando el registro.

Un Saludo.

Tecnofacil 11-07-2017 13:10:32

Oscarac; en el evento OnCellClick (DBGrid1CellClick), pero me parece Olbeup (Pueblo) tiene razón, el edit esta al principio del código y el Post al final, pero dependiendo de la situación la verificación se lleva a cabo antes de que se haga el Post, de allí el problema, no puse el código entero porque es bastante extenso todo ese evento, (de allí que se me cruzan los cables).

Casimiro Notevi 11-07-2017 13:28:02

Cita:

Empezado por Tecnofacil (Mensaje 519165)
no puse el código entero porque es bastante extenso

Pues no podemos adivinar :p, así que tendrás que ponerlo, y si es muuuuuuy grande, comprímelo a zip y lo adjuntas :)

oscarac 11-07-2017 15:46:31

Cita:

Empezado por Tecnofacil (Mensaje 519165)
Oscarac; en el evento OnCellClick (DBGrid1CellClick), pero me parece Olbeup (Pueblo) tiene razón, el edit esta al principio del código y el Post al final, pero dependiendo de la situación la verificación se lleva a cabo antes de que se haga el Post, de allí el problema, no puse el código entero porque es bastante extenso todo ese evento, (de allí que se me cruzan los cables).

ahhhh pues.....

Tecnofacil 12-07-2017 13:52:53

Les dejo el código a ver si pueden detectar algun error que se me pase. Cada columna tiene un checkbox, si le doy clic a la segunda columna verifica si la primera no esta tildad me impide tildar la segunda, el problema es que luego al intentar tildar la primera me sigue mostrando el mensaje y al depurar veo que me sigue tomando como si el clic se hizo en la segunda columna. (Hago clic en 'auto' y me dice que se hizo clic en 'armado'

Código Delphi [-]
procedure TF_Pedidosproceso.DBGrid1CellClick(Column: TColumn);
begin
  fdq_maestro.Edit;
    if Column.FieldName='auto' then      // Si le doy clic al check que se encuentra en la columna 'Autorizado'
      begin
        if fdq_maestroauto.value = 1 then //Si esta tildado pregunto
          begin
            if Application.MessageBox('El pedido aún no esta autorizado, Confirma?','Atención',MB_YESNO)=id_yes then
              begin
                fdq_maestroauto.value := 0;    // si responde 'Si' destildo
                fdq_maestro.Post;    //Grabo
                Dbgrid1.Repaint;
              end;
            end
          else    //Si no esta tildado pregunto
            begin
              if Application.MessageBox('El pedido ya esta autorizado o no requiere CAI, Confirma?','Atención',MB_YESNO)=id_yes then
                begin
                  fdq_maestroauto.value := 1; //Si responde si Tildo
                  fdq_maestro.Post;
                  Dbgrid1.Repaint;
                end;
            end;
        end;

      if Column.FieldName='armado' then
        begin
          if fdq_maestroarmado.value = 1 then
            begin
              if Application.MessageBox('El pedido aún no esta armado, Confirma?','Atención',MB_YESNO)=id_yes then
                begin
                  fdq_maestroarmado.value := 0;
                  fdq_maestro.Post;
                  Dbgrid1.Repaint;
                end;
            end
          else
            begin
              if fdq_maestroauto.Value = 1 then // verifico si el campo anterior esta tildado
                begin
                  if Application.MessageBox('El pedido ya esta armado, Confirma?','Atención',MB_YESNO)=id_yes then
                    begin
                      fdq_maestroarmado.value := 1;
                      fdq_maestro.Post;
                      Dbgrid1.Repaint;
                    end;
                end
                else
                begin
                  MessageBox(0, 'El pedido figura como "No autorizado"', 'ATENCIÓN', MB_ICONWARNING or MB_OK);
                  close;
                end;
            end;
          end;

        if Column.FieldName='original' then
          begin
            if fdq_maestrooriginal.value = 1 then
              begin
                if Application.MessageBox('Original aún no esta listo, Confirma?','Atención',MB_YESNO)=id_yes then
                  begin
                    fdq_maestrooriginal.value := 0;
                    fdq_maestro.Post;
                    Dbgrid1.Repaint;
                  end;
              end
              else
              begin
               if Application.MessageBox('Original listo, Confirma?','Atención',MB_YESNO)=id_yes then
                 begin
                   fdq_maestrooriginal.value := 1;
                   fdq_maestro.Post;
                   Dbgrid1.Repaint;
                 end;
              end;
          end;

        if Column.FieldName='chapa' then
          begin
            if fdq_maestrochapa.value = 1 then
              begin
                if Application.MessageBox('Chapa aún no esta lista, Confirma?','Atención',MB_YESNO)=id_yes then
                  begin
                    fdq_maestrochapa.value := 0;
                    fdq_maestro.Post;
                    Dbgrid1.Repaint;
                  end;
              end
              else
              begin
                if Application.MessageBox('Chapa lista, Confirma?','Atención',MB_YESNO)=id_yes then
                  begin
                    fdq_maestrochapa.value := 1;
                    fdq_maestro.Post;
                    Dbgrid1.Repaint;
                  end;
              end;
          end;
        if Column.FieldName='impreso' then
        begin
          if fdq_maestroimpreso.value = 1 then
            begin
              if Application.MessageBox('El pedido aún no esta Impreso, Confirma?','Atención',MB_YESNO)=id_yes then
                begin
                  fdq_maestroimpreso.value := 0;
                  fdq_maestro.Post;
                  Dbgrid1.Repaint;
                end;
            end
          else
            begin
              if Application.MessageBox('Pedido listo, Confirma?','Atención',MB_YESNO)=id_yes then
                begin
                  fdq_maestroimpreso.value := 1;
                  fdq_maestro.Post;
                  Dbgrid1.Repaint;
                end;
            end;
        end;
        if Column.FieldName='armado2' then
        begin
          if fdq_maestroarmado2.value = 1 then
            begin
              if Application.MessageBox('El pedido aún no fue armado, Confirma?','Atención',MB_YESNO)=id_yes then
                begin
                  fdq_maestroarmado2.value := 0;
                  fdq_maestro.Post;
                  Dbgrid1.Repaint;
                end;
            end
          else
            begin
              if Application.MessageBox('Armado final listo, Confirma?','Atención',MB_YESNO)=id_yes then
                begin
                  fdq_maestroarmado2.value := 1;
                  fdq_maestro.Post;
                  Dbgrid1.Repaint;
                end;
            end;
        end;
  end;
Por lo pronto lo que hago es cerrar el form y forzar la liberación de esas variables


La franja horaria es GMT +2. Ahora son las 12:09:28.

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