Clipper On Line • Ver Tópico - como evitar estouro na gravação de um campo

como evitar estouro na gravação de um campo

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

Moderador: Moderadores

 

como evitar estouro na gravação de um campo

Mensagempor Nascimento » 26 Jun 2017 12:06

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 de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

como evitar estouro na gravação de um campo

Mensagempor fladimir » 26 Jun 2017 12:30

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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

como evitar estouro na gravação de um campo

Mensagempor Nascimento » 26 Jun 2017 13:04

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 de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

como evitar estouro na gravação de um campo

Mensagempor asimoes » 26 Jun 2017 14:06

Tem uma função do harbour chamada LenNum

Você pode usar para testar o tamanho, exemplos:

  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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

como evitar estouro na gravação de um campo

Mensagempor fladimir » 26 Jun 2017 14:10

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 de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

como evitar estouro na gravação de um campo

Mensagempor asimoes » 26 Jun 2017 14:13

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

como evitar estouro na gravação de um campo

Mensagempor JoséQuintas » 26 Jun 2017 18:21

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

como evitar estouro na gravação de um campo

Mensagempor Jairo Maia » 26 Jun 2017 19:36

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:
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)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 4 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro