problema com onexit!

Delphi

15/11/2010

Amigos,      tenho dois 2 edits, os dois só recebem dados numericos, sendo que ao inserir numeros e o foco sair dos edts, salvo estes dados na tabela, o problema ocorre se o usuario deixar os edits vazios, ao sair dando enter ou tab dá pau.     Segundo algumas dicas da net tentei resolver com onexit mas não consegui. Osmar.
Osmar

Osmar

Curtidas 0

Respostas

Pietro Braga

Pietro Braga

15/11/2010

Mostre como está fazendo para salvar os dados e em qual evento está colocando. 
GOSTEI 0
Osmar

Osmar

15/11/2010

Amigo segue abaixo o código:   procedure TFrmNota.BitBtn1Click(Sender: TObject);
var
  bimestre : string;
begin
  IBQryAlunoTurma.Close;
  IBQryAlunoTurma.ParamByName('turma').AsString := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsString;
  IBQryAlunoTurma.Open;   ibqrynotas.close;
  ibqrynotas.parambyname('turma').AsString := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsString;   if (RadioButton1.Checked) then
    bimestre := '1 BIMESTRE'
  else if (radiobutton2.checked) then
    bimestre := '2 BIMESTRE'
  else if (radiobutton3.checked) then
    bimestre := '1 RECUPERACAO'
  else if (RadioButton4.Checked) then
    bimestre := '3 BIMESTRE'
  else if (radiobutton5.checked) then
    bimestre := '4 BIMESTRE'
  else if (radiobutton6.checked) then
    bimestre := '2 RECUPERACAO'
  else if (radiobutton7.checked) then
    bimestre := '1 SEMESTRE'
  else if (radiobutton8.checked) then
    bimestre := '2 SEMESTRE';   ibqrynotas.parambyname('bimestre').AsString := bimestre;
  ibqrynotas.parambyname('disciplina').AsString := DmDados.IBQryDisciplinaCODIGO.AsString;
  ibqrynotas.Open;   //verifica se ja existe dados para a tabela de notas   while not IBQryAlunoTurma.eof do
    begin
      if not IBQryNotas.Locate('MATRICULA_ALUNO_NOTAS',IBQryAlunoTurmaMATRICULA_ALUNO.AsString,[loPartialKey,loCaseInsensitive]) then
        begin
          ibqrynotas.Insert;
          IBQryNotasMATRICULA_ALUNO_NOTAS.AsString  :=IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
          IBQryNotasNOME_ALUNO_NOTAS.AsString       :=IBQryAlunoTurmaNOME_ALUNO.AsString;
          IBQryNotasBIMESTRE.AsString               :=bimestre;
          IBQryNotasCODIGO_TURMA_NOTAS.AsString     :=IBQryAlunoTurmaCODIGO_TURMA.AsString;
          IBQryNotasANO.AsString                    :=IBQryAlunoTurmaANO.AsString;
          IBQryNotasESCOLA.AsString                 :=IBQryAlunoTurmaESCOLA.AsString;
          IBQryNotasDISCIPLINA_NOTAS.AsString       :=DmDados.IBQryDisciplinaCODIGO.AsString;
          IBQryNotasNOTA.AsInteger                   :=0;
          IBQryNotasFALTAS.AsInteger                 :=0;
          ibqrynotas.Post;
        end
      else
        begin
          ibqrynotas.Edit;
          IBQryNotasMATRICULA_ALUNO_NOTAS.AsString  :=IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
          IBQryNotasNOME_ALUNO_NOTAS.AsString       :=IBQryAlunoTurmaNOME_ALUNO.AsString;
          IBQryNotasBIMESTRE.AsString               :=bimestre;
          IBQryNotasCODIGO_TURMA_NOTAS.AsString     :=IBQryAlunoTurmaCODIGO_TURMA.AsString;
          IBQryNotasANO.AsString                    :=IBQryAlunoTurmaANO.AsString;
          IBQryNotasESCOLA.AsString                 :=IBQryAlunoTurmaESCOLA.AsString;
          IBQryNotasDISCIPLINA_NOTAS.AsString       :=DmDados.IBQryDisciplinaCODIGO.AsString;
          ibqrynotas.Post;
        end;
      IBQryAlunoTurma.Next;
    end;   IBQryNotas.First;   dbedtNota.SetFocus; end;
GOSTEI 0
Pietro Braga

Pietro Braga

15/11/2010

Bem, pensei que você gravasse os dados ao sair do edit, bem se este é o código que você usa para gravar o que está nops edits que mencionou isso deve resolver.:
procedure TFrmNota.BitBtn1Click(Sender: TObject);
var
  bimestre : string;
begin	if (seuedit1.text= EmptyStr) or (SeuEdit2.Text= EmptyStr) then	begin		showmessage('Os campos tais devem ser preenchidos);		SeuEdit.SetFocus;	end	elsebegin
  IBQryAlunoTurma.Close;
  IBQryAlunoTurma.ParamByName('turma').AsString := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsString;
  IBQryAlunoTurma.Open;  ibqrynotas.close;
  ibqrynotas.parambyname('turma').AsString := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsString;  if (RadioButton1.Checked) then
    bimestre := '1 BIMESTRE'
  else if (radiobutton2.checked) then
    bimestre := '2 BIMESTRE'
  else if (radiobutton3.checked) then
    bimestre := '1 RECUPERACAO'
  else if (RadioButton4.Checked) then
    bimestre := '3 BIMESTRE'
  else if (radiobutton5.checked) then
    bimestre := '4 BIMESTRE'
  else if (radiobutton6.checked) then
    bimestre := '2 RECUPERACAO'
  else if (radiobutton7.checked) then
    bimestre := '1 SEMESTRE'
  else if (radiobutton8.checked) then
    bimestre := '2 SEMESTRE';  ibqrynotas.parambyname('bimestre').AsString := bimestre;
  ibqrynotas.parambyname('disciplina').AsString := DmDados.IBQryDisciplinaCODIGO.AsString;
  ibqrynotas.Open;  //verifica se ja existe dados para a tabela de notas  while not IBQryAlunoTurma.eof do
    begin
      if not IBQryNotas.Locate('MATRICULA_ALUNO_NOTAS',IBQryAlunoTurmaMATRICULA_ALUNO.AsString,[loPartialKey,loCaseInsensitive]) then
        begin
          ibqrynotas.Insert;
          IBQryNotasMATRICULA_ALUNO_NOTAS.AsString  :=IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
          IBQryNotasNOME_ALUNO_NOTAS.AsString       :=IBQryAlunoTurmaNOME_ALUNO.AsString;
          IBQryNotasBIMESTRE.AsString               :=bimestre;
          IBQryNotasCODIGO_TURMA_NOTAS.AsString     :=IBQryAlunoTurmaCODIGO_TURMA.AsString;
          IBQryNotasANO.AsString                    :=IBQryAlunoTurmaANO.AsString;
          IBQryNotasESCOLA.AsString                 :=IBQryAlunoTurmaESCOLA.AsString;
          IBQryNotasDISCIPLINA_NOTAS.AsString       :=DmDados.IBQryDisciplinaCODIGO.AsString;
          IBQryNotasNOTA.AsInteger                   :=0;
          IBQryNotasFALTAS.AsInteger                 :=0;
          ibqrynotas.Post;
        end
      else
        begin
          ibqrynotas.Edit;
          IBQryNotasMATRICULA_ALUNO_NOTAS.AsString  :=IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
          IBQryNotasNOME_ALUNO_NOTAS.AsString       :=IBQryAlunoTurmaNOME_ALUNO.AsString;
          IBQryNotasBIMESTRE.AsString               :=bimestre;
          IBQryNotasCODIGO_TURMA_NOTAS.AsString     :=IBQryAlunoTurmaCODIGO_TURMA.AsString;
          IBQryNotasANO.AsString                    :=IBQryAlunoTurmaANO.AsString;
          IBQryNotasESCOLA.AsString                 :=IBQryAlunoTurmaESCOLA.AsString;
          IBQryNotasDISCIPLINA_NOTAS.AsString       :=DmDados.IBQryDisciplinaCODIGO.AsString;
          ibqrynotas.Post;
        end;
      IBQryAlunoTurma.Next;
    end;  IBQryNotas.First;  dbedtNota.SetFocus;end;end;

GOSTEI 0
Osmar

Osmar

15/11/2010

Pietro,          Dessa forma não funciona, porque realmente eu salvo os dados ao sair do segundo dbedtnota.text.         Por exemplo, quando cliko em qualquer radiobutton a tabela já entra em modo de inserção e os dois dbedtnota e dbedtfalta recebem 0 (zero), então o problema acontece se o usuário deixar algum dos dois dbedts vazios, conclusão; tenho que forçar o usuário deixar numeros de 0 a 9.
GOSTEI 0
Pietro Braga

Pietro Braga

15/11/2010

vazios você diz sem nada mesmo? Pode ser 0 certo?
No Onexit do dbedtnota:
[code]if (dbedtnota.text= EmptyStr) or (dbedtfalta.Text= EmptyStr) thenbegin showmessage('Os campos Faltas e Notas devem ser preenchidos'); dbedtFalta.SetFocus;endelse...seu código...end;
GOSTEI 0
Osmar

Osmar

15/11/2010

Pietro,            Quando chamo o formulario os dois dbedts já vem carregado com 0 (zero), isto é, se anteriormente o usuario não inseriu nenhuma nota, lembro mais uma vez que o erro só acontece se o usuario deixar qualquer um dos dois edts vazios ou seja sem nada dentro, conforme sua dica fiz o codigo abaixo, mas só funciona corretamente o primeiro dbedtnota, nesse caso o usário é obrigado a colocar algum valor numerico se nao ele fica preso no edt, mas o erro ainda acontece no dbedfalta, se o mesmo ficar vazio ao dar ENTER acontece o erro, lembro tambem que ao sair do dbedtfalta os dados são salvos na tabela, então acho que o sistema está processando PRIMEIRO o salvamento e deveria ser primeiro o ONEXIT.    procedure TFrmNota.dbedtnotaExit(Sender: TObject);
begin
 if dbedtnota.Text = EmptyStr then
  begin
   showmessage('O campo Nota deve ser preenchido!');
   dbedtnota.SetFocus;
  end;
end;
procedure TFrmNota.dbedtfaltaExit(Sender: TObject);
begin
 if (dbedtfalta.text= EmptyStr) then
  begin
   showmessage('O campo Nota deve ser preenchido!');
   dbedtfalta.SetFocus;
  end; end; end.
GOSTEI 0
Osmar

Osmar

15/11/2010

Agradeço a todos o problema já foi resolvido.   Osmar.
GOSTEI 0
POSTAR