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 04-08-2011
fwhite fwhite is offline
Miembro
 
Registrado: sep 2006
Posts: 37
Poder: 0
fwhite Va por buen camino
Proceso al cerrar una form

Hola amigos:
Quisiera que me dijerais porque no al cerrar una form no me hace lo que le digo. La procedure es la siguiente:
Código Delphi [-]
 
procedure TfmDeportes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  With dmMain do
    begin
      tbDeportes.Active := False;
      tbContadores.Active := False;
    end;
    ShowMessage('Punto de Control');  (Hasta aqui bien, sale el mensaje)
  With dmMain.tbDeportes do  (Desde aqui no lo hace)
    begin
      if State in [dsInsert] then
        begin
          if MessageDlg('Los datos introducidos no han sido grabados' +
            #13 + #13 +
            '¿Deseas grabarlos ahora?', mtconfirmation, [mbNo, mbOk], 0) =
            mrOk then
            Post;
          With dmMain.tbContadores do
            begin
              Edit;
              FieldValues['Tutores'] := FieldValues['Tutores'] + 1;
              Post;
            end;
        end;
      if State in [dsEdit] then
        begin
          if MessageDlg('Los datos introducidos no han sido grabados' +
            #13 + #13 +
            '¿Deseas grabarlos ahora?', mtconfirmation, [mbNo, mbOk], 0) =
            mrOk then
            Post;
        end;
    end;
  Action := caFree;
end;
Graciñas.

Última edición por ecfisa fecha: 04-08-2011 a las 19:51:04. Razón: Etiquetas [DELPHI] [/DELPHI]
Responder Con Cita
  #2  
Antiguo 04-08-2011
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 fwhite.

Moví tu mensaje del foro Builder C++ a varios ya que tu código es Delphi.
Por favor usa las etiquetas para encerrar tu código.

Saludos y gracias por tu colaboración.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 04-08-2011 a las 19:58:17.
Responder Con Cita
  #3  
Antiguo 04-08-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Te recomiendo que mejor uses el evento OnCloseQuery del formulario. Desde este evento puedes hasta indicar si deseas que el formulacio se cierre o cancelar la acción:

Código Delphi [-]
procedure TfmDeportes.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  // El proceso es correcto o se desea cerrar el formulario
  CanClose := True
  // El proceso tiene algún error o el usuario cancela la acción de cerrar el formulario
  CanClose := False
end;

Pasando a otro tema, cuando publiques código fuente en Delphi, usa las etiquetas [delphi]:

[delphi]
begin
ProcedimientoAEjecutar;
Variable := 'hola mundo';
// ejemplo
end;
[/delphi]

lo que se mostrará en los foros así:

Código Delphi [-]
begin
  ProcedimientoAEjecutar;
  Variable := 'hola mundo';
  // ejemplo
end;

Revisando tu código, veo que lo primero que haces es cerrar dos dataset y luego enseguida quieres hacer un Edit y un Post sobre ellos. Me imagino que también obtienes algún error del tipo "Esta acción no se puede realizar sobre un DataSet cerrado".


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #4  
Antiguo 04-08-2011
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 de nuevo fwhite.

Fijate que aqui:
Código Delphi [-]
  With dmMain do
    begin
      tbDeportes.Active := False;
      tbContadores.Active := False;
    end;
cerras los DataSet y luego intentas utilizarlos.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 05-08-2011
fwhite fwhite is offline
Miembro
 
Registrado: sep 2006
Posts: 37
Poder: 0
fwhite Va por buen camino
Codigo no funciona al cerrar un form

Hola amigos:
Haber si me podeis decir por que no funciona la siguiente procedure desde donde indico. Graciñas desde ya.

Código Delphi [-]
 
procedure TfmDeportes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  With dmMain do
    begin
      tbDeportes.Active := False;
      tbContadores.Active := False;
    end;
    ShowMessage('Punto de Control');   // hasta aquí funciona
  With dmMain.tbDeportes do   // desde aquí no lo tiene en cuenta
    begin
      if State in [dsInsert] then
        begin
          if MessageDlg('Los datos introducidos no han sido grabados' +
            #13 + #13 +
            '¿Deseas grabarlos ahora?', mtconfirmation, [mbNo, mbOk], 0) =
            mrOk then
            Post;
          With dmMain.tbContadores do
            begin
              Edit;
              FieldValues['Deportes'] := FieldValues['Deportes'] + 1;
              Post;
            end;
        end;
      if State in [dsEdit] then
        begin
          if MessageDlg('Los datos introducidos no han sido grabados' +
            #13 + #13 +
            '¿Deseas grabarlos ahora?', mtconfirmation, [mbNo, mbOk], 0) =
            mrOk then
            Post;
        end;
    end;
  Action := caFree;
end;

Última edición por ecfisa fecha: 05-08-2011 a las 04:10:18.
Responder Con Cita
  #6  
Antiguo 05-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
tu codigo esta algo desordenado
creo que que colocas el active en false
eso es como cerrar la tabla

entonces.. si la tabla estar cerrada, no puede realizarse ninguna operacion con ella
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #7  
Antiguo 05-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Antes que todo, ordena un poco tu código y utiliza correctamente las equitas Delphi. Fíjate la diferencia con respecto a tu código:
Código Delphi [-]
procedure TfmDeportes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    With dmMain do
    begin
        tbDeportes.Active := False;
        tbContadores.Active := False;
    end;
    
    ShowMessage('Punto de Control'); // hasta aquí funciona
    
    With dmMain.tbDeportes do // desde aquí no lo tiene en cuenta
    begin
        if State in [dsInsert] then
        begin
            if MessageDlg('Los datos introducidos no han sido grabados' +
                           #13 + #13 + '¿Deseas grabarlos ahora?',
                           mtconfirmation, [mbNo, mbOk], 0) = mrOk then
                Post;
                
            With dmMain.tbContadores do
            begin
                Edit;
                FieldValues['Deportes'] := FieldValues['Deportes'] + 1;
                Post;
            end;
        end;
        
        if State in [dsEdit] then
        begin
            if MessageDlg('Los datos introducidos no han sido grabados' +
                          #13 + #13 + '¿Deseas grabarlos ahora?',
                          mtconfirmation, [mbNo, mbOk], 0) = mrOk then
                Post;
        end;
    end;
    Action := caFree;
end;

Ahora, sería mejor así:
Código Delphi [-]
procedure TfmDeportes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    With dmMain do
    begin
        tbDeportes.Active := False;
        tbContadores.Active := False;
    end;
    
    ShowMessage('Punto de Control'); // hasta aquí funciona
    
    With dmMain.tbDeportes do // desde aquí no lo tiene en cuenta
    begin
        if (State in [dsInsert,  dsEdit]) then
        begin
            if MessageDlg('Los datos introducidos no han sido grabados' +
                           #13 + #13 + '¿Deseas grabarlos ahora?',
                           mtconfirmation, [mbNo, mbOk], 0) = mrOk then
                Post;
                
            With dmMain.tbContadores do
            begin
                Edit;
                FieldValues['Deportes'] := FieldValues['Deportes'] + 1;
                Post;
            end;
        end;
    end;
    Action := caFree;
end;

Pero lo que realmente quieres debe ser esto:
Código Delphi [-]
procedure TfmDeportes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    With dmMain.tbDeportes do // desde aquí no lo tiene en cuenta
    begin
        if (State in [dsInsert,  dsEdit]) then
        begin
            if MessageDlg('Los datos introducidos no han sido grabados' +
                           #13 + #13 + '¿Deseas grabarlos ahora?',
                           mtconfirmation, [mbNo, mbOk], 0) = mrOk then
                Post;
                
            With dmMain.tbContadores do
            begin
                Edit;
                FieldValues['Deportes'] := FieldValues['Deportes'] + 1;
                Post;
            end;
        end;
    end;
   
    With dmMain do
    begin
        tbDeportes.Active := False;
        tbContadores.Active := False;
    end;
    
    Action := caFree;
end;
El problema era que estabas cerrando las tablas antes de hacer las comparaciones de si ésta estaba en modo de edición o inserción. Por consiguiente las condiciones siempre devolvían False y nunca se ejecutaba lo que pretendías.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #8  
Antiguo 05-08-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

¿Por que repites temas?

http://www.clubdelphi.com/foros/showthread.php?t=75203


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #9  
Antiguo 05-08-2011
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.

Gracias por el aviso maeyanes , ya los combiné.

fwhite, como ya te han dicho: Por favor no dupliques los temas.

Saludos y gracias por tu colaboración.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 05-08-2011
fwhite fwhite is offline
Miembro
 
Registrado: sep 2006
Posts: 37
Poder: 0
fwhite Va por buen camino
Hola amigos:
En primer lugar, pido disculpas a todos por mi mal uso del foro. Procuraré en adelante seguir estrictamente las normas.
En segundo lugar, efectivamente, el cierre de las Bases estaba mal colocado, con lo que el problema está resuelto.
Graciñas a todos.
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
Usar un proceso desde cualquier form. elmarkivo Varios 1 18-06-2008 20:50:15
Cerrar al detectar proceso malditango API de Windows 5 18-01-2008 01:51:06
No Cerrar un Proceso DarkDrakon API de Windows 2 16-07-2007 10:11:34
como cerrar un proceso Guadalupe .NET 0 01-06-2006 21:21:48


La franja horaria es GMT +2. Ahora son las 05:14:27.


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