Página 1 de 1
como evitar estouro na gravação de um campo
Enviado: 26 Jun 2017 12:06
por Nascimento
Amigos estou com um problema em um banco no estoque, por falta de alguns clientes nao alimentarem o estoque o valor fica negativo
as vezes acontecendo de dar erro na hora do replace
como eu faço pra evitar isso o tipo do campo é Numerico 9 decimal 3
como eu faria pra evitar gravar quando chegar ao limite negativo maximo?
sem precisar alterar a estrutura do banco ....
como evitar estouro na gravação de um campo
Enviado: 26 Jun 2017 12:30
por fladimir
Coloca na interceptação do errorsys se o erro for relativo a estouro do campo pra avaliar se se refere ao campo em questão da tabela em questão e ai trata isso e retorna TRUE, caso esse tipo de erro puder retornar (não lembro de cabeça) tem uns tipos de erros q permitem outros não.
como evitar estouro na gravação de um campo
Enviado: 26 Jun 2017 13:04
por Nascimento
não teria nobre como ser na propria função...
tipo se fosse estourar o campo nao gravasse?
como evitar estouro na gravação de um campo
Enviado: 26 Jun 2017 14:06
por asimoes
Tem uma função do harbour chamada LenNum
Você pode usar para testar o tamanho, exemplos:
Código: Selecionar todos
PROCEDURE Main
? LenNum( 1 ) // result: 1
? LenNum( 10 ) // result: 2
? LenNum( 100 ) // result: 3
? LenNum( 1000 ) // result: 4
? LenNum( 10.1 ) // result: 4
? LenNum( 100.12 ) // result: 6
? LenNum( 1000.123 ) // result: 8
? LenNum( 0.1 ) // result: 3
? LenNum( 0.01 ) // result: 4
? LenNum( 0.001 ) // result: 5
? LenNum( 0.0001 ) // result: 6
RETURN
como evitar estouro na gravação de um campo
Enviado: 26 Jun 2017 14:10
por fladimir
Sim com certeza, se vc centraliza a gravação pode usar a ideia do Alexandre antes de gravar, a forma q passei seria se não quisesse ir alterando em vários possíveis locais q fazem a gravação.
como evitar estouro na gravação de um campo
Enviado: 26 Jun 2017 14:13
por asimoes
Não sei se é isto, enfim tem que testar:
nVal := -999999999.999
nLen := LenNum( nVal ) // VAI RETORNAR 14
nVal := -9999999999.999
nLen := LenNum( nVal ) // VAI RETORNAR 15, AQUI VAI ESTOURAR NO SEU CASO
como evitar estouro na gravação de um campo
Enviado: 26 Jun 2017 18:21
por JoséQuintas
não teria nobre como ser na propria função...
tipo se fosse estourar o campo nao gravasse?
Talvez fosse péssimo, nunca iria saber que tentou gravar algo que não cabe.
A questão é: porque está tentando gravar um número que não cabe?
Se o aplicativo fizer checagem, resolvido.
Ou... se mesmo assim quiser deixar automático.... só alterar na errorsys pra quando for esse tipo de erro seguir em frente.
como evitar estouro na gravação de um campo
Enviado: 26 Jun 2017 19:36
por Jairo Maia
Olá pessoal,
Uma outra opção:
999999999.999 (se positivo, então 9 inteiros e 3 decimais)
-99999999.999 (se negativo, então 8 inteiros e 3 decimais, pois o sinal (-) ocupa uma casa)
E se fizer então:
Código: Selecionar todos
If ( M->nValorSalvar >= -99999999.999 .And. M->nValorSalvar <= 999999999.999 )
Replace nCampo With M->nValorSalvar
Else
Hb_Alert( "Valor do campo cNomeCampo excede o limite permitido" )
EndIf