Fórum validar maskedit #559729

30/07/2016

0

Pessoal, o que eu poderia colocar para validar um maskedit para evitar que o usuario tente fazer uma busca com o campo de pesquisa (maskedit) preenchido incorretamente, já que isso da um erro no query.
Eu ja configurei o mask para receber somente numeros e um IF para nao buscar com o campo em branco.
Mas se o sujeito escrever _20/15 ao inves de 020/15 vai dar erro, eh claro.
Como posso corrigir isso?

begin
if maskeditip.Text <>  '   /  ' then
begin
 dmdados.queryPesquisarEnvolvidos.SQL.Text:='select * from ip where ip_num='+
                                             quotedstr(maskeditIP.Text);
 dmdados.queryPesquisarEnvolvidos.Open;
Ivo Nascimento

Ivo Nascimento

Responder

Post mais votado

01/08/2016

No evento KeyPress do maskedit você coloca assim:
  if not (Key in['0'..'9']) then
    Key := '#';


procedure TForm2.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in['0'..'9']) then
    Key := '#';
end;

Huidemar Costa

Huidemar Costa
Responder

Gostei + 1

Mais Posts

01/08/2016

Raimundo Pereira

begin
try
StrToDate(maskeditip.Text);
//Aqui incluir sua rotina de busca nesta linha
except
ShowMessage ('Data Inválida!');
Abort;
end;
end;
Responder

Gostei + 0

01/08/2016

Ivo Nascimento

begin
try
StrToDate(maskeditip.Text);
//Aqui incluir sua rotina de busca nesta linha
except
ShowMessage ('Data Inválida!');
Abort;
end;
end;


Mas nesse caso o maskedit não é data. É um string no formato 123/15 (tres digitos /dois digitos);
Responder

Gostei + 0

01/08/2016

Natanael Ferreira

Teste assim:

var
  Codigo: string;
begin
  if maskeditip.Text <> '   /  ' then
  begin
    Codigo := Format('%3.3d', [StrToInt(Copy(maskeditip.Text, 1, 3))]) +
      Copy(maskeditip.Text, 4, 3);

    dmdados.queryPesquisarEnvolvidos.SQL.Text := 'select * from ip where ip_num = ' +
      quotedstr(Codigo);
    dmdados.queryPesquisarEnvolvidos.Open;
  end;
end;
Responder

Gostei + 0

01/08/2016

Ivo Nascimento

Teste assim:

var
  Codigo: string;
begin
  if maskeditip.Text  '   /  ' then
  begin
    Codigo := Format('%3.3d', [StrToInt(Copy(maskeditip.Text, 1, 3))]) +
      Copy(maskeditip.Text, 4, 3);

    dmdados.queryPesquisarEnvolvidos.SQL.Text := 'select * from ip where ip_num = ' +
      quotedstr(Codigo);
    dmdados.queryPesquisarEnvolvidos.Open;
  end;
end;

ok, ele pesquisa qq formato de conteudo,mas da uma mensagem de "missing sql properties."
To aki quebrando cabeça tb.
Eu acho que eu precisaria contar a quantidade de digitos inseridos no campo para forçar que sejam digitados todos os 6 caracteres.
Responder

Gostei + 0

01/08/2016

Raimundo Pereira

var
Codigo: string;
begin
if maskeditip.Text '' / '' then
begin
Codigo := Format(''%3.3d'', [StrToInt(Copy(maskeditip.Text, 1, 3))]) +

//020/15=6 Caraacteres
Copy(maskeditip.Text, 1, 6);
//Codigo:=StringReplace(Codigo, ''/'', '''', [rfReplaceAll, rfIgnoreCase]);// Caso precise remover a barra

if Length(Codigo)=6 then
begin
dmdados.queryPesquisarEnvolvidos.SQL.Text := ''select * from ip where ip_num = '''''' +
quotedstr(Codigo)+'''''''';
dmdados.queryPesquisarEnvolvidos.Open;
end;
end;


Ou você pode criar um procedimento no onexit do editmask para validar os dados e quantidades de caracteres e caso não esteja no padrão ele foque novamente o deitmask
Responder

Gostei + 0

02/08/2016

Ivo Nascimento

Resolvido.Obrigado pelas colaborações.
ficou assim:
procedure Tf_cadastrarIP.btnatualizarClick(Sender: TObject);
var
  codigo:string;
begin
if maskeditip.Text <>  '   /  ' then
begin
 codigo:= Format('%3.3d',[StrToInt(Copy(maskeditip.Text, 1, 3))])+
    Copy(maskeditip.Text,1,6);
 //acrescentado
 if Length(Codigo)=6 then
begin
dmdados.queryPesquisarEnvolvidos.SQL.Text := 'select * from ip where ip_num = ' +
quotedstr(Codigo);
dmdados.queryPesquisarEnvolvidos.Open;
end;
//acrescentado ate aki
 dmdados.queryPesquisarEnvolvidos.SQL.Text:='select * from ip where ip_num='+
                                             quotedstr(maskeditIP.Text);
 dmdados.queryPesquisarEnvolvidos.Open;
  IF dmdados.queryPesquisarEnvolvidos.IsEmpty then
   begin
   MessageDlg('O Inquérito '+ maskeditip.Text + ' não foi encontrado no sistema!', mtError,mbOKCancel,0);
   maskeditip.SetFocus;
   ABORT; //  <========= SO TAVA FALTANDO ISSO AKI PRA FICAR PERFEITO.
   end
   else
//continua e exibe os envolvidos no dbgrid.
Responder

Gostei + 0

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

Aceitar