quantidade de digitos antes da virgula
Boa tarde a todos!
Tenho um problema a resolver e não estou dando conta mesmo.
seguinte:
tenho um campo na tabela que é decimal (7,4), porem se o usuário digitar uma sequencia maior q a quantidade de 8 números sem digitar a vírgula apresenta esta mensagem: Number is out of range.
Sei que é por ter ultrapassado a quantidade de 7 casas antes da vírgula, porem como faço para apresentar uma mensagem amigável? tentei no onvalidate do tfield e não consegui capturar este erro, alguém pode me ajudar, ou se tiver alguma ideia.
no displayformat estou usando ###.##0,000
Obrigado
Tenho um problema a resolver e não estou dando conta mesmo.
seguinte:
tenho um campo na tabela que é decimal (7,4), porem se o usuário digitar uma sequencia maior q a quantidade de 8 números sem digitar a vírgula apresenta esta mensagem: Number is out of range.
Sei que é por ter ultrapassado a quantidade de 7 casas antes da vírgula, porem como faço para apresentar uma mensagem amigável? tentei no onvalidate do tfield e não consegui capturar este erro, alguém pode me ajudar, ou se tiver alguma ideia.
no displayformat estou usando ###.##0,000
Obrigado
Marcos
Curtidas 0
Melhor post
Willian Silva
13/04/2018
Bom dia, Marcos poderia está tentando usa um try catch não sei se tem essa forma de tratamento de exceção mais vale a pena da uma pesquisada.
GOSTEI 1
Mais Respostas
Luiz Vichiatto
12/04/2018
Marcos,
Você pode utilizar o onKeyPress do componente para contar o número de itens, já fiz este tipo de tratamento, porém limitei o tamanho da entrada do campo, não contando virgulas.
Se estiver utilizando algum componente do tipo DataControl, experimente setar o MaxValue (caso tenha) ou MaxLength
Também pode tratar com try ... exception... end;
Você pode utilizar o onKeyPress do componente para contar o número de itens, já fiz este tipo de tratamento, porém limitei o tamanho da entrada do campo, não contando virgulas.
Se estiver utilizando algum componente do tipo DataControl, experimente setar o MaxValue (caso tenha) ou MaxLength
Também pode tratar com try ... exception... end;
GOSTEI 0
Marcos
12/04/2018
Bom dia, Marcos poderia está tentando usa um try catch não sei se tem essa forma de tratamento de exceção mais vale a pena da uma pesquisada.
WSilva, obrigado por estar me ajudando, o problema é que não funciona, estou usando direto no DBEDIT, e o que faz esta validação é o onvalidate do tfield, preciso saber como tratar o onvalidate. ex:
procedure TDATA_empresa.CDS_produtoPesoValidate(Sender: TField);
begin
if Sender.AsFloat > 50 then
raise Exception.Create('Não permitido peso maior que 50');
end;
mas não quero testar o valor em si, mas o número de dígitos permitidos, no caso os 7 dígitos antes da vírgula, o delphi mostra uma tela de erro, quero que apresente algo em português.
GOSTEI 0
Marcos
12/04/2018
Marcos,
Você pode utilizar o onKeyPress do componente para contar o número de itens, já fiz este tipo de tratamento, porém limitei o tamanho da entrada do campo, não contando virgulas.
Se estiver utilizando algum componente do tipo DataControl, experimente setar o MaxValue (caso tenha) ou MaxLength
Também pode tratar com try ... exception... end;
boa tarde Luiz, obrigado por ajudar, o try não funciona pois esta dentro de uma validação do TField, o Maxvalue, também não deu, ele acusa que passou do valor x, mas quando há excesso de dígitos apresenta o erro, agora a ideia do onkeypress ainda não testei, tem como me passar um exemplo por favor?
Você pode utilizar o onKeyPress do componente para contar o número de itens, já fiz este tipo de tratamento, porém limitei o tamanho da entrada do campo, não contando virgulas.
Se estiver utilizando algum componente do tipo DataControl, experimente setar o MaxValue (caso tenha) ou MaxLength
Também pode tratar com try ... exception... end;
GOSTEI 0
Raimundo Pereira
12/04/2018
Boa tarde.
Veja se ajuda na sua validação:
Veja se ajuda na sua validação:
uses StrUtils;
Function Extrair_Antes_Virgula(Origem:string):string;
var
a, b : integer;
begin
a := length(Origem);
b := pos(',', Origem);
Result := Trim(copy(Origem, 1, b - 1));
end;
Function Valida_Quantidade_Prefixo(Origem:string; Max:integer):Boolean;
begin
if Length(Origem)<8 then
begin
Result:=true;
end
else
begin
Result:=false;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Valida_Quantidade_Prefixo(Extrair_Antes_Virgula(Edit1.Text),7)=true then
begin
ShowMessage('OK - Possui exatamente '+IntToStr(Length(Extrair_Antes_Virgula(Edit1.Text)))+' Dig');
end
else
begin
ShowMessage('ops - Possui exatamente '+IntToStr(Length(Extrair_Antes_Virgula(Edit1.Text)))+' Dig');
end;
end;
GOSTEI 0
Raimundo Pereira
12/04/2018
Function Valida_Quantidade_Prefixo(Origem:string; Max:integer):Boolean; begin if Length(Origem)<Max+1 then begin Result:=true; end else begin Result:=false; end;
GOSTEI 0
Marcos
12/04/2018
Boa tarde novamente.
A solução foi usar o ApplicationEvents, e no Events, Exception
if (Screen.ActiveControl = DBEdit9) then // DBEdit9 é o nome do campo que recebe 7,4
begin
ShowMessage('Informe um valor válido!');
DBEdit9.Clear;
DBEdit9.SetFocus;
end;
lembrando que usei no Tfiel
DisplayFormat : ###,##0.000
MaxValue 99999,999
obrigado a todos
A solução foi usar o ApplicationEvents, e no Events, Exception
if (Screen.ActiveControl = DBEdit9) then // DBEdit9 é o nome do campo que recebe 7,4
begin
ShowMessage('Informe um valor válido!');
DBEdit9.Clear;
DBEdit9.SetFocus;
end;
lembrando que usei no Tfiel
DisplayFormat : ###,##0.000
MaxValue 99999,999
obrigado a todos
GOSTEI 0