Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

[Resolvido] Validação em InputQuery

Recommended Posts

Ola Pessoal:

 

Tenho no meu código uma parte que tem:

 

procedure TfrmPrincipal.ImprimirClick(Sender: TObject);
var
  Dia: Integer;
  Texto: String;
begin
		Texto := '';
		if InputQuery('Digite o Dia para recebimento','Impressão para Recebimento em casa',Texto) then
		 begin
				  try
					  Dia := StrToInt(Texto);
				  except
					  ShowMessage('Dia inválido!');
					  Exit;
				  end;
		  end
		 else
		   begin
			 Exit;
		   end;
		 Application.CreateForm(TfrmRelatorio,frmRelatorio);
		 if not frmRelatorio.QryClientes.Locate('MelhorDia', Dia, []) then
			begin
				frmRelatorio.Close;
				ShowMessage('Registro não encontrado!');
				Exit;
			end
		  else
			begin
				frmRelatorio.QryClientes.Filter   := 'MelhorDia =  ' + inttostr(Dia);
				frmRelatorio.QryClientes.Filtered := true;
				frmRelatorio.QuickRepListagem.PreviewModal;
				frmRelatorio.Free;
			  end;
end;

Nele tem uma inputquery, e eu preciso validar se a pessoa digitou nela letras ou numeros.

Caso não tenha digitado numeros, imprimir na tela uma mensagem dizendo "Só aceita numeros".

 

Outra coisa, é limitar o campo da inputquery a apenas 3 digitos "___";

 

Desde já meus agradecimentos.

 

Carlos Rocha

Compartilhar este post


Link para o post
Compartilhar em outros sites

No exemplo abaixo, em tempo de projeto vai dar uma violação, mais faça o exemplo abaixo, compile, e rode o projeto fora do delphi ....

var
  Texto: String;
begin
  Texto:= '';
  if InputQuery('Digite o Dia para recebimento','Impressão para Recebimento em casa',Texto) then
  begin
	Try
	  StrToInt(Texto);
	Except
	  raise Exception.Create('Permitido somente números!');
	End;
	if Length(Texto) > 3 then
	begin
	  raise Exception.Create('Permitido somente 3 caracteres!');
	end;
  end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi.

 

Só que no caso de 3 digitos, eu quero fazer tipo uma mascara não permitindo um quarto digito.

 

Obs.: não são 3 digitos e sim até 3 digitos

 

Na verdade, eu queria usar a função abaixc para validar se foi ou não digitados numeros. Porem, não estou sabendo como usar-la no meu código(no caso, numa inputquery).

 

function ExisteInt(Texto:String): Boolean;
{Testa se em uma string existe um numero inteiro valido ou não}
var
i:integer;
begin
try
  i := StrToInt(Texto);
  Result := True;
except
  Result := False;
end;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais ta certo sua função .... mais você poderia fazer assim tbm ..

 

function IsNumeric(const S: String): Boolean;
var
	x: SmallInt;
begin
	Result:= True;
	For x:= 1 to Length(S) do
	begin
		if not(S[x] in['0'..'9']) then
		begin
			Result:= False; Break;
		end;
	end;
end;

var
	Texto: String;
begin
	if InputQuery('Digite o Dia para recebimento','Impressão para Recebimento em casa',Texto) then
	begin
		if not(IsNumeric(Texto)) then
		begin
			ShowMessage('Permitido somente numeros'); Exit;
		end;
	end;

qto a montar uma mascara no InputQuery ... não tem como não ... se quiser isso mesmo, entao poderia criar um formulario normal, nele você colocaria um MaskEdit, e configurar o tamanho do form para um tamanho equivalente a de um inputquery ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, tamos quase la só falta uma coisa:

 

Preciso testar se se o dia digitado no campo texto da inputquery é menor que 1 ou mAior que 31

caso afirmativo dizer que o dia tem que ser entre 1 e 31;

Tentei assim mas não deu certo:

if ((Dia < 1) or (Dia > 31)) then
			   begin
				ShowMessage('Dia tem quer de 1 até 31!');
				exit;
			   end;
Ta +pra php né?

Brincadeira.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eis meu código completo.

Por favor me ajude a encontrar o quee esta erraedo.

obs:

Esta dando para todo numero que digito que o valor é menor que 1 e maior que 31.

Mesmo os que não são.

 

unit principal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ZConnection, StdCtrls, Buttons, ExtCtrls, DB,
  ZAbstractRODataset, ZAbstractDataset, ZDataset, jpeg;

type
  TfrmPrincipal = class(TForm)
	funerplan: TZConnection;
	Fundo: TImage;
	cadastrar: TBitBtn;
	pesquizar: TBitBtn;
	sair: TBitBtn;
	sobre: TBitBtn;
	Imprimir: TBitBtn;
	procedure cadastrarClick(Sender: TObject);
	procedure sobreClick(Sender: TObject);
	procedure pesquizarClick(Sender: TObject);
	procedure sairClick(Sender: TObject);
	procedure ImprimirClick(Sender: TObject);
	function ExisteInt(Texto:String): Boolean;
  private
	{ Private declarations }
  public
	{ Public declarations }
  end;

var
  frmPrincipal: TfrmPrincipal;

implementation

uses cadastrar, pesquizas, relatorio, sobre;

{$R *.dfm}

procedure TfrmPrincipal.cadastrarClick(Sender: TObject);
begin
if frmCadastrar = NIL then  //cria o form se ele não foi criado ainda
 Application.CreateForm(tfrmCadastrar,frmCadastrar);
 frmCadastrar.Show;
end;

procedure TfrmPrincipal.sobreClick(Sender: TObject);
begin
if frmSobre = NIL then  //cria o form se ele não foi criado ainda
 Application.CreateForm(tfrmSobre,frmSobre);
 frmSobre.Show;
end;

procedure TfrmPrincipal.pesquizarClick(Sender: TObject);
begin
if frmPesquizas = NIL then  //cria o form se ele não foi criado ainda
 Application.CreateForm(tfrmPesquizas,frmPesquizas);
 frmPesquizas.Show;
end;

procedure TfrmPrincipal.sairClick(Sender: TObject);
begin
Close;
end;

function IsNumeric(const S: String): Boolean;
var
	x: SmallInt;
begin
	Result:= True;
	For x:= 1 to Length(S) do
	begin
		if not(S[x] in['0'..'9']) then
		begin
			Result:= False; Break;
		end;
	end;
end;

procedure TfrmPrincipal.ImprimirClick(Sender: TObject);
var
  Dia: Integer;
  Texto: String;
begin
		Texto := '';
		Dia := 0;
		if InputQuery('Digite o Dia para recebimento','Impressão para Recebimento em casa',Texto) then
		 begin
		   if not(IsNumeric(Texto)) then
			 begin
				ShowMessage('Permitido somente numeros');
				Exit;
			 end;
		   if Length(Texto) > 3 then
				begin
				  ShowMessage('Permitido até 3 caracteres');
				  Exit;
				end;
		  if ((Dia < 1) or (Dia > 31)) then
			   begin
				ShowMessage('Dia tem quer de 1 até 31!');
				exit;
			   end;

			try
				Dia := StrToInt(Texto);
			except
				ShowMessage('Dia inválido!');
				Exit;
			end;
		 end
		 else
		   begin
			 Exit;
		   end;
		 Application.CreateForm(TfrmRelatorio,frmRelatorio);
		 if not frmRelatorio.QryClientes.Locate('MelhorDia', Dia, []) then
			begin
				frmRelatorio.Close;
				ShowMessage('Registro não encontrado!');
				Exit;
			end
		  else
			begin
				frmRelatorio.QryClientes.Filter   := 'MelhorDia =  ' + inttostr(Dia);
				frmRelatorio.QryClientes.Filtered := true;
				frmRelatorio.QuickRepListagem.PreviewModal;
				frmRelatorio.Free;
			  end;
end;

end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais ai q ta o erro meu camarada...

você ta atribuindo o valor para Dia depois q faz a validação se ele foi ou não informado corretamente ...

 

Faça assim:

if (StrToInt(Texto) < 1) or (StrToInt(Texto) > 31) then
begin
	ShowMessage('Dia tem quer de 1 até 31!');
	 exit;
end;
E esqueça a variavel DIA...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok.

Agora deu certo.

Terminei meu projeto.

Bom, é claro que ao decorrer dos textes(para aprendizado), vão surgindo novas validações. Espero poder contar novamente com os amigos.

 

Mas, sobre o meu código, para quem tiver um pouquinho de curiosidade, ficou assim.

Vale a pena dar uma olhado.

 

Muito Obrigado.

unit principal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ZConnection, StdCtrls, Buttons, ExtCtrls, DB,
  ZAbstractRODataset, ZAbstractDataset, ZDataset, jpeg;

type
  TfrmPrincipal = class(TForm)
	funerplan: TZConnection;
	Fundo: TImage;
	cadastrar: TBitBtn;
	pesquizar: TBitBtn;
	sair: TBitBtn;
	sobre: TBitBtn;
	Imprimir: TBitBtn;
	procedure cadastrarClick(Sender: TObject);
	procedure sobreClick(Sender: TObject);
	procedure pesquizarClick(Sender: TObject);
	procedure sairClick(Sender: TObject);
	procedure ImprimirClick(Sender: TObject);
  private
	{ Private declarations }
  public
	{ Public declarations }
  end;

var
  frmPrincipal: TfrmPrincipal;

implementation

uses cadastrar, pesquizas, relatorio, sobre, Math;

{$R *.dfm}

procedure TfrmPrincipal.cadastrarClick(Sender: TObject);
begin
if frmCadastrar = NIL then  //cria o form se ele não foi criado ainda
 Application.CreateForm(tfrmCadastrar,frmCadastrar);
 frmCadastrar.Show;
end;

procedure TfrmPrincipal.sobreClick(Sender: TObject);
begin
if frmSobre = NIL then  //cria o form se ele não foi criado ainda
 Application.CreateForm(tfrmSobre,frmSobre);
 frmSobre.Show;
end;

procedure TfrmPrincipal.pesquizarClick(Sender: TObject);
begin
if frmPesquizas = NIL then  //cria o form se ele não foi criado ainda
 Application.CreateForm(tfrmPesquizas,frmPesquizas);
 frmPesquizas.Show;
end;

procedure TfrmPrincipal.sairClick(Sender: TObject);
begin
Close;
end;

function IsNumeric(const S: String): Boolean;
var
	x: SmallInt;
begin
	Result:= True;
	For x:= 1 to Length(S) do
	begin
		if not(S[x] in['0'..'9']) then
		begin
			Result:= False; Break;
		end;
	end;
end;

procedure TfrmPrincipal.ImprimirClick(Sender: TObject);
var
  Dia : Integer;
  Texto: String;
begin
		Texto := '';
		if InputQuery('Digite o Dia para recebimento','Impressão para Recebimento em casa',Texto) then
		 begin
			If Texto = '' then
			  begin
					ShowMessage('Qual o dia para o relatório? Você não preencheu!');
					Exit;
			  end;

			if not(IsNumeric(Texto)) then
			  begin
					ShowMessage('Aqui, somente números são permitidos');
					Exit;
			  end;
			if Length(Texto) > 2 then
				begin
					ShowMessage('Permitido até 2 caracteres');
					Exit;
				end;
			if (StrToInt(Texto) < 1) or (StrToInt(Texto) > 31) then
				begin
					ShowMessage('Dia entre 1 à 31!');
					exit;
				end;
			try
				Dia := StrToInt(Texto);
			except
				ShowMessage('Dia inválido!');
				Exit;
			end;
		 end
		 else
		   begin
			Exit;
		   end;
		 Application.CreateForm(TfrmRelatorio,frmRelatorio);
		 if not frmRelatorio.QryClientes.Locate('MelhorDia', Dia, []) then
			begin
				frmRelatorio.Close;
				ShowMessage('Registro não encontrado!');
				Exit;
			end
		  else
			begin
				frmRelatorio.QryClientes.Filter   := 'MelhorDia =  ' + inttostr(Dia);
				frmRelatorio.QryClientes.Filtered := true;
				frmRelatorio.QuickRepListagem.PreviewModal;
				frmRelatorio.Free;
			  end;
end;

end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.