validar maskedit
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?
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
Curtidas 0
Melhor post
Huidemar Costa
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;
GOSTEI 1
Mais Respostas
Raimundo Pereira
30/07/2016
begin
try
StrToDate(maskeditip.Text);
//Aqui incluir sua rotina de busca nesta linha
except
ShowMessage ('Data Inválida!');
Abort;
end;
end;
try
StrToDate(maskeditip.Text);
//Aqui incluir sua rotina de busca nesta linha
except
ShowMessage ('Data Inválida!');
Abort;
end;
end;
GOSTEI 0
Ivo Nascimento
30/07/2016
begin
try
StrToDate(maskeditip.Text);
//Aqui incluir sua rotina de busca nesta linha
except
ShowMessage ('Data Inválida!');
Abort;
end;
end;
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);
GOSTEI 0
Natanael Ferreira
30/07/2016
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;GOSTEI 0
Ivo Nascimento
30/07/2016
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.
GOSTEI 0
Raimundo Pereira
30/07/2016
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
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
GOSTEI 0
Ivo Nascimento
30/07/2016
Resolvido.Obrigado pelas colaborações.
ficou assim:
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.
GOSTEI 0