Evento OnCloseQuery do Form e problemas

Delphi

05/10/2005

olá pessoal

estou utilizando no meu sistema o evento Onclosequery do Form, para verificar se existem registros em insert ou edit.
caso exista eu perunnto ao usuário : ´salvar o registro não salvo?´, aí apresento as opção
mryes
mrNo
mrCancel

se ele cancelar, Canclose recebe False e o form não é fechado.
se ele optar por Não salvar, dá um Table.cancel e fecha o form.

o Problema está no salvar, caso ele clique em Sim. pq no salvar eu executo o BtnSalvarOnclick(self); e após fecho o form.
só que se ocorrer algum erro no salvar, como por exemplo campos obrigatórios, ele não salva e fecha o form mesmo assim.
existe alguma maneira de saber se BtnSalvarOnclick(self) foi executado com sucesso, pra só após fechar o form ?

procedure TFrm1F.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if((Tbl1.State = dsinsert)or
     (Tbl1.State = dsedit))then
  begin
    case DtMdlGcm1.BsMsg.MessageDlg(´O registro atual não foi salvo.´+#13+10+´Salvar antes de fechar ?´,
         mtConfirmation, [mbYes,mbNo,mbCancel], 1)of
      mryes    :
        begin
          BtnSalvar.Onclick(self);         
        end;
      mrno     :
        begin
          Tbl1.Cancel;
        end;
      mrcancel :
        begin
          Canclose := False; 
        end;
  end;
end;
|



obrigado

Diogo


Diogoalles

Diogoalles

Curtidas 1

Melhor post

Rjun

Rjun

05/10/2005

Em vez de você fazer essa coisa horrivel que é chamar um evento, cria uma função que retorne true ou false. Se a gravação dos dados ocorrer com sucesso então retorna true e fecha o form. Senão, retorna false e não fecha o form.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  DialogResult: Word;
begin
  if (Tbl1.State in [dsinsert, dsEdit])  then
  begin
    DialogResult := MessageDlg(´O registro atual não foi salvo.´+ 13 + 10 + ´Salvar antes de fechar?´, mtConfirmation, [mbYes,mbNo,mbCancel], 1);

    if DialogResult = mrYes then
      CanClose := SalvaRegistro()
    else if DialogResult = mrYes then
      Tbl1.Cancel;
    else
      Canclose := false;
  end;
end;



GOSTEI 2
POSTAR