TDBEdit.OnExit X Fechar Form
Delphi XE3
Pessoal seguinte, fiz uma função para checar o ID da tabela, exemplo ... checar o código do CLIENTE na tela de contas a receber.
Fiz dentro do OnExit do TDBEdit.
Nessa função eu checo se o mesmo está em branco para não realizar nenhuma pesquisa, porém se digitei um código que não existe ele mostra mensagem de aviso que não foi encontrado o cliente, porém se o usuário apertar ESC ou o botão cancelar ele passa pelo OnExit mostrando o aviso.
Existe alguma forma para nesse caso ele não passar pelo OnExit dos TDBEdit ou o que vocês recomendam?
Abs
Pessoal seguinte, fiz uma função para checar o ID da tabela, exemplo ... checar o código do CLIENTE na tela de contas a receber.
Fiz dentro do OnExit do TDBEdit.
Nessa função eu checo se o mesmo está em branco para não realizar nenhuma pesquisa, porém se digitei um código que não existe ele mostra mensagem de aviso que não foi encontrado o cliente, porém se o usuário apertar ESC ou o botão cancelar ele passa pelo OnExit mostrando o aviso.
Existe alguma forma para nesse caso ele não passar pelo OnExit dos TDBEdit ou o que vocês recomendam?
Abs
Lorival Filho
Curtidas 0
Respostas
Rafael Cunha
07/02/2013
Se você utilizar o evento OnChange devera resolve o seu problema.
GOSTEI 0
Bruno Leandro
07/02/2013
Ola guerreiro voce pode fazer logo apos a exibição da mensagem,
showmessage('nao encontrado');
close;
exit;
showmessage('nao encontrado');
close;
exit;
GOSTEI 0
Lorival Filho
07/02/2013
mas precisava que não mostrasse a mensagem, pois a tela fecha, mas mostra a mensagem de erro.
GOSTEI 0
Rafael Cunha
07/02/2013
Mesmo usando o OnChange ele mostra a mensagem?
GOSTEI 0
Perivaldo Martins
07/02/2013
mas precisava que não mostrasse a mensagem, pois a tela fecha, mas mostra a mensagem de erro.
Certo, mostre-nos como está seu código no OnExit desse Edit.
Boa sorte bons códigos!
GOSTEI 0
Lorival Filho
07/02/2013
procedure TfrmFormCadPadrao.OnExitIDTabela(Sender: TObject);
var sTabela : String;
oCampos : OleVariant;
oValores : OleVariant;
oRetorno : OleVariant;
oResult : OleVariant;
nRetorno : Integer;
begin
if Sender is TDbEdit then
begin
//deixa em branco o campo de resultado
if TForm(self).FindComponent( 'edt'+TDbEdit( Sender ).Field.FieldName ) is TEdit then
TEdit( TForm(self).FindComponent( 'edt'+TDbEdit( Sender ).Field.FieldName ) ).Text := '';
// se o campo n estiver preenchido sai da rotina
if TDbEdit( Sender ).Text = '' then
exit;
// carrega as variaveis como padrão
// a tabela de maneira gera é o nome após o ID - Exemplo : IDENTIDADE
sTabela := Copy( TDbEdit( Sender ).Field.FieldName, 3, 50) ;
// por padrao será procurado apenas 1 campo
oCampos := VarArrayCreate ( [0,0], varVariant );
oCampos[0] := TDbEdit( Sender ).Field.FieldName;
// por padrão será enviado apenas o texto informado no edit
oValores := VarArrayCreate ( [0,0], varVariant );
oValores[0] := TDbEdit( Sender ).Text;
// cria Variant de retorno
nRetorno := 0;
if Pos( TDbEdit( Sender ).Field.FieldName+'.', 'IDENTIDADE.IDFILIAL.IDTIPODOCUMENTO.IDCONTACAIXA.' ) > 0 then
nRetorno := nRetorno + 1;
oRetorno := VarArrayCreate ( [0,nRetorno], varVariant );
// campo de retorno
// todas as tabelas que vão retornar a campo NOME
if Pos( TDbEdit( Sender ).Field.FieldName+'.', 'IDENTIDADE.IDFILIAL.' ) > 0 then
oRetorno[0] := 'NOME'
else if Pos( TDbEdit( Sender ).Field.FieldName+'.', 'IDTIPODOCUMENTO.IDCONTACAIXA.' ) > 0 then
oRetorno[0] := 'DESCRICAO';
// se o numero de campos de retorno for igual a 1 é pq precisa retornar o IDEMPRESA
if nRetorno = 1 then
oRetorno[1] := 'IDEMPRESA';
// abaixo será informa o que não for padrão alterando as variaiveis acima
// checa se foi encontrado a tabela
if sTabela <> '' then
begin
// executa a consulta do ID da tabela
oResult := DM.ChecaIDTabela ( sTabela, oCampos, oValores, oRetorno );
if oResult[0] <> '' then
begin
//if TDbEdit( Sender ).Parent is TForm then
if TForm(self).FindComponent( 'edt'+TDbEdit( Sender ).Field.FieldName ) is TEdit then
TEdit( TForm(self).FindComponent( 'edt'+TDbEdit( Sender ).Field.FieldName ) ).Text :=
oResult[0];
// ID da empresa da tabela
if Pos( TDbEdit( Sender ).Field.FieldName+'.', 'IDENTIDADE.IDFILIAL.IDTIPODOCUMENTO.IDCONTACAIXA.' ) > 0 then
cdsCad.FieldByName( 'IDEMP'+Copy( TDbEdit( Sender ).Field.FieldName,3,50) ).AsString := oResult[1];
end
else
TDbEdit( Sender ).SetFocus;
end;
end;
end;
var sTabela : String;
oCampos : OleVariant;
oValores : OleVariant;
oRetorno : OleVariant;
oResult : OleVariant;
nRetorno : Integer;
begin
if Sender is TDbEdit then
begin
//deixa em branco o campo de resultado
if TForm(self).FindComponent( 'edt'+TDbEdit( Sender ).Field.FieldName ) is TEdit then
TEdit( TForm(self).FindComponent( 'edt'+TDbEdit( Sender ).Field.FieldName ) ).Text := '';
// se o campo n estiver preenchido sai da rotina
if TDbEdit( Sender ).Text = '' then
exit;
// carrega as variaveis como padrão
// a tabela de maneira gera é o nome após o ID - Exemplo : IDENTIDADE
sTabela := Copy( TDbEdit( Sender ).Field.FieldName, 3, 50) ;
// por padrao será procurado apenas 1 campo
oCampos := VarArrayCreate ( [0,0], varVariant );
oCampos[0] := TDbEdit( Sender ).Field.FieldName;
// por padrão será enviado apenas o texto informado no edit
oValores := VarArrayCreate ( [0,0], varVariant );
oValores[0] := TDbEdit( Sender ).Text;
// cria Variant de retorno
nRetorno := 0;
if Pos( TDbEdit( Sender ).Field.FieldName+'.', 'IDENTIDADE.IDFILIAL.IDTIPODOCUMENTO.IDCONTACAIXA.' ) > 0 then
nRetorno := nRetorno + 1;
oRetorno := VarArrayCreate ( [0,nRetorno], varVariant );
// campo de retorno
// todas as tabelas que vão retornar a campo NOME
if Pos( TDbEdit( Sender ).Field.FieldName+'.', 'IDENTIDADE.IDFILIAL.' ) > 0 then
oRetorno[0] := 'NOME'
else if Pos( TDbEdit( Sender ).Field.FieldName+'.', 'IDTIPODOCUMENTO.IDCONTACAIXA.' ) > 0 then
oRetorno[0] := 'DESCRICAO';
// se o numero de campos de retorno for igual a 1 é pq precisa retornar o IDEMPRESA
if nRetorno = 1 then
oRetorno[1] := 'IDEMPRESA';
// abaixo será informa o que não for padrão alterando as variaiveis acima
// checa se foi encontrado a tabela
if sTabela <> '' then
begin
// executa a consulta do ID da tabela
oResult := DM.ChecaIDTabela ( sTabela, oCampos, oValores, oRetorno );
if oResult[0] <> '' then
begin
//if TDbEdit( Sender ).Parent is TForm then
if TForm(self).FindComponent( 'edt'+TDbEdit( Sender ).Field.FieldName ) is TEdit then
TEdit( TForm(self).FindComponent( 'edt'+TDbEdit( Sender ).Field.FieldName ) ).Text :=
oResult[0];
// ID da empresa da tabela
if Pos( TDbEdit( Sender ).Field.FieldName+'.', 'IDENTIDADE.IDFILIAL.IDTIPODOCUMENTO.IDCONTACAIXA.' ) > 0 then
cdsCad.FieldByName( 'IDEMP'+Copy( TDbEdit( Sender ).Field.FieldName,3,50) ).AsString := oResult[1];
end
else
TDbEdit( Sender ).SetFocus;
end;
end;
end;
GOSTEI 0