Fórum problema com onexit! #390527

15/11/2010

0

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

Responder

Posts

15/11/2010

Pietro Braga

Mostre como está fazendo para salvar os dados e em qual evento está colocando. 
Responder

Gostei + 0

15/11/2010

Osmar

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;
Responder

Gostei + 0

16/11/2010

Pietro Braga

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;

Responder

Gostei + 0

16/11/2010

Osmar

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.
Responder

Gostei + 0

16/11/2010

Pietro Braga

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;
Responder

Gostei + 0

16/11/2010

Osmar

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.
Responder

Gostei + 0

22/05/2011

Osmar

Agradeço a todos o problema já foi resolvido.   Osmar.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar