problema com onexit!
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
Curtidas 0
Respostas
Pietro Braga
15/11/2010
Mostre como está fazendo para salvar os dados e em qual evento está colocando.
GOSTEI 0
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;
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
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
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
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;
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
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.
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
15/11/2010
Agradeço a todos o problema já foi resolvido.
Osmar.
GOSTEI 0