Ver Mensaje Individual
  #7  
Antiguo 05-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Reputación: 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