como evitar estouro na gravação de um campo

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

como evitar estouro na gravação de um campo

Mensagem 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 ....
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

como evitar estouro na gravação de um campo

Mensagem 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.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

como evitar estouro na gravação de um campo

Mensagem por Nascimento »

não teria nobre como ser na propria função...
tipo se fosse estourar o campo nao gravasse?
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

como evitar estouro na gravação de um campo

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

como evitar estouro na gravação de um campo

Mensagem 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.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

como evitar estouro na gravação de um campo

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

como evitar estouro na gravação de um campo

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

como evitar estouro na gravação de um campo

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder