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');
With dmMain.tbDeportes do 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');
With dmMain.tbDeportes do 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 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