Evento on Exit no dbedit
Alguem pode me ajudar a fazer q no evento on exit de um edit ele verifique numa tabela se já tem um cadastro feito com o q foi digitado no edit?
Tipo assim, é um edit de inserção de dados, aí eu cadastro um novo departamento, blz. Só q quando eu for passar para os outros campos q faltam ser preeenchidos, eu kero q ele de um showmesage ou messagedialog informando q aquele departamento já existe, ficou claro?
Isso pode ser feito no evento on exit, mas eu naum sei como, por favor me ajudem!
Tipo assim, é um edit de inserção de dados, aí eu cadastro um novo departamento, blz. Só q quando eu for passar para os outros campos q faltam ser preeenchidos, eu kero q ele de um showmesage ou messagedialog informando q aquele departamento já existe, ficou claro?
Isso pode ser feito no evento on exit, mas eu naum sei como, por favor me ajudem!
Pabhen
Curtidas 0
Respostas
Carnette
16/02/2003
É comum fazermos uso do evento OnExit quando queremos validar o conteúdo de um Edit. E essa pode ser uma boa prática quando necessitamos verificar o que foi digitado apenas quando o usuário terminar de fazer a entrada de dados, como, por exemplo, um Edit que vai receber o CPF ou CNPJ.
Ao colocarmos um código qualquer no evento OnExit ele sempre será executado quando o usuário sair do Edit, o que acontece quando ele pressiona a tecla TAB, clica com o mouse em um outro Edit ou pressiona um botão OK, por exemplo.
No entanto, existem algumas situações especiais em que o evento OnExit não é gerado. Quer um exemplo? Você está no Edit e, ao invés de clicar no botão OK, você pressiona as teclas ALT + O (considerando que o botão OK tem a tecla O como atalho). É como se você tivesse pressionado o botão OK, porém, sem perder o foco que está no Edit. Só mais um exemplo: Os botões do tipo SpeedButton não recebem foco, então, mesmo que clique com o mouse sobre um SpeedButton, o foco continuará no Edit e, conseqüentemente, o evento OnExit não será gerado.
E a solução?
A solução para esse pequeno inconveniente é simples. Basta você colocar o seguinte código no evento OnClick do botão.
procedure TForm1.Button1Click(Sender: TObject);
begin
ActiveControl := nil;
...
end;
Com isso você força a saída de qualquer Edit ou outro componente que esteja com o foco, gerando assim o evento OnExit.
Ao colocarmos um código qualquer no evento OnExit ele sempre será executado quando o usuário sair do Edit, o que acontece quando ele pressiona a tecla TAB, clica com o mouse em um outro Edit ou pressiona um botão OK, por exemplo.
No entanto, existem algumas situações especiais em que o evento OnExit não é gerado. Quer um exemplo? Você está no Edit e, ao invés de clicar no botão OK, você pressiona as teclas ALT + O (considerando que o botão OK tem a tecla O como atalho). É como se você tivesse pressionado o botão OK, porém, sem perder o foco que está no Edit. Só mais um exemplo: Os botões do tipo SpeedButton não recebem foco, então, mesmo que clique com o mouse sobre um SpeedButton, o foco continuará no Edit e, conseqüentemente, o evento OnExit não será gerado.
E a solução?
A solução para esse pequeno inconveniente é simples. Basta você colocar o seguinte código no evento OnClick do botão.
procedure TForm1.Button1Click(Sender: TObject);
begin
ActiveControl := nil;
...
end;
Com isso você força a saída de qualquer Edit ou outro componente que esteja com o foco, gerando assim o evento OnExit.
GOSTEI 0
Pabhen
16/02/2003
Naum foi isso q eu perguntei.
vc naum entendeu minha pergunta.
leia de novo
de qualquer forma, agradeço
vc naum entendeu minha pergunta.
leia de novo
de qualquer forma, agradeço
GOSTEI 0
Carnette
16/02/2003
eu entendi sim...só estou a te dizer dos riscos de usar o evento onexit
GOSTEI 0
Pabhen
16/02/2003
Blz, mas e a minha primeira pergunta, vc sabe resolver?
GOSTEI 0
Carnette
16/02/2003
a função é bem simples...
no evento onexit voce faz o seguinte
if TABELATAL.FinedKey(´FIELDDATABELA´,variavel) then begin
ShowMessage(´Registro já existge´);
DBEDITTAL.SetFocus;
end;
no evento onexit voce faz o seguinte
if TABELATAL.FinedKey(´FIELDDATABELA´,variavel) then begin
ShowMessage(´Registro já existge´);
DBEDITTAL.SetFocus;
end;
GOSTEI 0
Pabhen
16/02/2003
Essa variavel q vc colocou depois do campo da tabela, ela serve pra q?
ela é o proprio edit.text?
desculpa a ignorancia
ela é o proprio edit.text?
desculpa a ignorancia
GOSTEI 0
Carnette
16/02/2003
sim..ela é o proprio DBEDIT..
if TABELATAL.FinedKey(´FIELDDATABELA´,DBEdit.Text) then begin
ShowMessage(´Registro já existge´);
DBEDITTAL.SetFocus;
end;
if TABELATAL.FinedKey(´FIELDDATABELA´,DBEdit.Text) then begin
ShowMessage(´Registro já existge´);
DBEDITTAL.SetFocus;
end;
GOSTEI 0
Pabhen
16/02/2003
pois eu ja tentei assim e naum deu certo:
if DataModule1.tDepart.FindKey(´depart´,dbesigladepart.text) then
begin
showmessage(´teste´);
dbeSiglaDepart.SetFocus;
end;
desse outro jeito funcionou +/-:
if DataModule1.tDepart.FindKey([dbesigladepart.text]) then
begin
showmessage(´teste´);
dbeSiglaDepart.SetFocus;
end;
O problema q tem nesse jeito é q ele da um erro de chave primaria.
Tou na mesma, sem saber o q fazer?
if DataModule1.tDepart.FindKey(´depart´,dbesigladepart.text) then
begin
showmessage(´teste´);
dbeSiglaDepart.SetFocus;
end;
desse outro jeito funcionou +/-:
if DataModule1.tDepart.FindKey([dbesigladepart.text]) then
begin
showmessage(´teste´);
dbeSiglaDepart.SetFocus;
end;
O problema q tem nesse jeito é q ele da um erro de chave primaria.
Tou na mesma, sem saber o q fazer?
GOSTEI 0