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