TDBEdit.OnExit X Fechar Form

07/02/2013

1

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
Responder

Posts

07/02/2013

Rafael Cunha

Se você utilizar o evento OnChange devera resolve o seu problema.
Responder

07/02/2013

Bruno Leandro

Ola guerreiro voce pode fazer logo apos a exibição da mensagem,

showmessage('nao encontrado');
close;
exit;
Responder

18/02/2013

Lorival Filho

mas precisava que não mostrasse a mensagem, pois a tela fecha, mas mostra a mensagem de erro.
Responder

18/02/2013

Rafael Cunha

Mesmo usando o OnChange ele mostra a mensagem?
Responder
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!
Responder

18/02/2013

Lorival Filho

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;
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira